Initialization

iphs1 (optional, default=0) -- initial phase of waveform
in table ifn1, expressed as a fraction of a cycle (0 to 1).
A negative value will cause phase initialization to be skipped.

iphs2 (optional, default=0) -- initial phase of waveform
in table ifn2, expressed as a fraction of a cycle (0 to 1).
A negative value will cause phase initialization to be skipped.

Performance

xfrq1 -- a factor that, when multipled by the
kcps parameter, gives the frequency of oscillator #1.

xfrq2 -- a factor that, when multipled by the
kcps parameter, gives the frequency of oscillator #2.

xndx1 -- the index of the modulation of oscillator #2
by oscillator #1.

xndx2 -- the index of the modulation of oscillator #1
by oscillator #2.

kcps -- a common denominator, in cycles per second,
for both oscillators frequencies.

crossfm implements a crossed frequency modulation
algorithm. The audio-rate output of oscillator #1 is used to modulate the
frequency input of oscillator #2 while the audio-rate output of oscillator #2
is used to modulate the frequency input of oscillator #1. This double feedback
structure produces a rich set of sounds with some chaotic behaviour.
crossfmi behaves like crossfm
except that linear interpolation is used for table lookup.

crosspm and crosspmi implement
cross phase modulation between two oscillators.

crossfmpm and crossfmpmi
implement cross frequency/phase modulation between two oscillators.
Oscillator #1 is frequency-modulated by oscillator #2 while oscillator #2
is phase-modulated by oscillator #1.

Those opcodes may produce very rich spectra, especially with high
modulation indexes, and in some cases foldover aliases may occur if the
sampling rate is not high enough. Moreover the audio output may vary in
function of the sampling rate, due to the non-linearity of the algorithm.
In Csound, two other opcodes have this characteristic:
planet and chuap.

Examples

Here is an example of the crossfm opcode. It uses the file
crossfm.csd.

In this example, an FLTK GUI is used to control in real-time the oscillators
frequency with two Flcount widgets and the cross
modulation indexes with one FLjoy widget. It uses a
sampling rate of 96000Hz.