crossfm

crossfm — Deux oscillateurs se modulant mutuellement en fréquence et/ou en phase.

Description

Deux oscillateurs se modulant mutuellement en fréquence et/ou en phase.

Syntaxe

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]

Initialisation

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.

Exécution

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] 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.

Exemples

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.

Voir aussi

Plus d'information sur ces opcodes : http://www.csounds.com/journal/issue12/crossfm.html, écrit par François Pinot.

Crédits

Auteur : François Pinot
2005-2009

Nouveau dans la version 5.12