Signal Generators: FM Synthesis

## foscil, foscili

ar **foscil** xamp, kcps, kcar, kmod, kndx, ifn[, iphs]
ar **foscili** xamp, kcps, kcar, kmod, kndx, ifn[, iphs]

### Description

Basic frequency modulated oscillators.

### Initialization

*ifn* – function table number. Requires a wrap-around guard point.

*iphs* (optional) – initial phase of waveform in table *ifn*, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.

### Performance

**foscil** is a composite unit that effectively banks two **oscils** in the familiar Chowning FM setup, wherein the audio-rate output of one generator is used to modulate the frequency input of another (the "carrier"). Effective carrier frequency = *kcps* * *kcar*, and modulating frequency = *kcps* * *xmod*. For integral values of *xcar* and *xmod*, the perceived fundamental will be the minimum positive value of *kcps* * (*xcar* – n * *xmod*), n = 1,1,2,... The input *kndx* is the index of modulation (usually time-varying and ranging 0 to 4 or so) which determines the spread of acoustic energy over the partial positions given by n = 0,1,2,.., etc. *ifn* should point to a stored sine wave. Previous to version 3.50, *xcar* and *xmod* could be k-rate only.

**foscili** differs from **foscil** in that the standard procedure of using a truncated phase as a sampling index is here replaced by a process that interpolates between two successive lookups. Interpolating generators will produce a noticeably cleaner output signal, but they may take as much as twice as long to run. Adequate accuracy can also be gained without the time cost of interpolation by using large stored function tables of 2K, 4K or 8K points if the space is available.

Signal Generators: FM Synthesis