crossfm — Deux oscillateurs se modulant mutuellement en fréquence et/ou en phase.
a1, a2 crossfm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
a1, a2 crossfmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
a1, a2 crosspm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
a1, a2 crosspmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
a1, a2 crossfmpm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
a1, a2 crossfmpmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
ifn1 -- numéro de la table de fonction pour l'oscillateur 1. Nécessite un point de garde.
ifn2 -- numéro de la table de fonction pour l'oscillateur 2. Nécessite un point de garde.
iphs1 (facultatif, 0 par défaut=0) -- phase initiale de la forme d'onde de la table ifn1, exprimée comme une fraction d'une période (0 à 1). Avec une valeur négative, l'initialisation sera ignorée.
iphs2 (facultatif, 0 par défaut=0) -- phase initiale de la forme d'onde de la table ifn2, exprimée comme une fraction d'une période (0 à 1). Avec une valeur négative, l'initialisation sera ignorée.
xfrq1 -- un facteur qui, lorsqu'il est multiplié par le paramètre kcps done la fréquence de l'oscillateur 1.
xfrq2 -- un facteur qui, lorsqu'il est multiplié par le paramètre kcps done la fréquence de l'oscillateur 2.
xndx1 -- l'indice de modulation de l'oscillateur 2 par l'oscillateur 1.
xndx2 -- l'indice de modulation de l'oscillateur 1 par l'oscillateur 2.
kcps -- un dénominateur commun, en cycles par seconde, pour les fréquences des deux oscillateurs.
crossfm implémente un algorithme de modulation de fréquence croisée. La sortie de taux audio de l'oscillateur 1 module l'entrée en fréquence de l'oscillateur 2 tandis que la sortie audio de l'oscillateur 2 module l'entrée en fréquence de l'oscillateur 1. Cette double structure de rétroaction produit des sonorités riches avec parfois un comportement chaotique. crossfmi fonctionne comme crossfm mais en utilisant l'interpolation linéaire pour la lecture des tables.
crosspm et crosspmi implémentent la modulation de phase croisée entre deux oscillateurs.
crossfmpm et crossfmpmi implémentent une modulation de fréquence/phase croisée entre deux oscillateurs. L'oscillateur 1 est modulé en fréquence par l'oscillateur 2 tandis que l'oscillateur 2 est modulé en phase par l'oscillateur 1.
On peut lire mon article dans le Csound Journal pour plus d'information.
![]() |
Avertissement |
---|---|
Ces opcodes peuvent produire des spectres très riches, particulièrement avec des indices de modulation importants et, dans certains cas des fréquences de repliement peuvent apparaître si le taux d'échantillonnage n'est pas suffisamment élevé. De plus, la sortie audio peut varier en fonction du taux d'échantillonnage à cause de la non-linéarité de l'algorithme. Dans Csound, deux autres opcodes présentent cette caractéristique : planet et chuap. |
Voici un exemple de l'opcode crossfm. Il utilise le fichier crossfm.csd.
Exemple 152. Exemple de l'opcode crossfm.
<CsoundSynthesizer> <CsOptions> -d -o dac </CsOptions> <CsInstruments> sr = 96000 ksmps = 10 nchnls = 2 0dbfs = 1 FLpanel "crossfmForm", 600, 400, 0, 0 gkfrq1, ihfrq1 FLcount "Freq #1", 0, 20000, 0.001, 1, 1, 200, 30, 20, 50, -1 gkfrq2, ihfrq2 FLcount "Freq #2", 0, 20000, 0.001, 1, 1, 200, 30, 20, 130, -1 gkndx1, gkndx2, ihndx1, ihndx2 FLjoy "Indexes", 0, 10, 0, 10, 0, 0, -1, -1, 200, 200, 300, 50 FLsetVal_i 164.5, ihfrq1 FLsetVal_i 263.712, ihfrq2 FLsetVal_i 1.5, ihndx1 FLsetVal_i 3, ihndx2 FLpanelEnd FLrun maxalloc 1, 2 instr 1 kamp linen 0.5, 0.01, p3, 0.5 a1,a2 crossfm gkfrq1, gkfrq2, gkndx1, gkndx2, 1, 1, 1 outs a1*kamp, a2*kamp endin </CsInstruments> <CsScore> f1 0 16384 10 1 0 i1 0 60 e </CsScore> </CsoundSynthesizer>
Dans cet exemple, on utilise une interface graphique FLTK pour contrôler en temps réel la fréquence des oscillateurs au moyen de deux contrôles Flcount et les indices de la modulation croisée avec un contrôle FLjoy. Il utilise un taux d'échantillonnage de 96000Hz.
Plus d'information sur ces opcodes : http://www.csounds.com/journal/issue12/crossfm.html, écrit par François Pinot.