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.

[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 190. Exemple de l'opcode crossfm.

<CsoundSynthesizer>

<CsOptions>
  -d -o dac
</CsOptions>

<CsInstruments>
sr     = 48000
ksmps  = 10
nchnls = 2
0dbfs  = 1

          instr 1
idur       =          p3 
iamp       =          p4 
ifrq1      =          p5 
ifrq2      =          p6 
indx1      =          p7 
indx2      =          p8 
kenv       linen      iamp, 0.05, idur, 0.2 
a1, a2     crossfm    ifrq1, ifrq2, indx1, indx2, 1, 1, 1 
           outs       a1*kenv, a2*kenv 
          endin

          instr 2
kx         init       0.0 
kdx        init       0.1 
kdur       init       p4 
kamp       init       p5 
kndx       init       0 
kmax       init       p6 
kfq1       init       440.0 
kfq2       init       557.0 
knx1       init       3.5 
knx2       init       4.8 
           event      "i", 1, kx, kdur, kamp, kfq1, kfq2, knx1, knx2 
kx         =          kx + kdx 
knx1       =          knx1 - 0.025 
knx2       =          knx2 - 0.075 
kndx       =          kndx + 1 
if (kndx <= kmax) kgoto nextone
           turnoff 
nextone: 
          endin
</CsInstruments>

<CsScore>
f 1 0 16384 10 1 0

i 2 0 2 0.67 0.16 150
i 1 15.1 1.5 0.1 440 557 -0.25 -6.45 0.05 1.2
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

Plus d'information sur ces opcodes : http://www.csoundjournal.com/issue12/crossfm.html.

Crédits

Auteur : François Pinot
2005-2009

Nouveau dans la version 5.12