fof

fof — Produit des grains FOF (sinusoïde amortie) pour la synthèse par formant et la synthèse granulaire.

Description

La sortie audio est une succession de grains FOF (fonction d'onde formantique) amorcés à la fréquence xfund avec une pointe spectrale à xform. Pour xfund supérieur à 25 Hz ces grains produisent un formant comme dans la parole avec des caractéristiques spectrales déterminées par les paramètres d'entrée de taux-k. Pour des fondamentales plus basses ce générateur fournit une forme spéciale de synthèse granulaire.

Syntaxe

ares fof xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \
      ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]

Initialisation

iolaps -- quantité de mémoire préallouée nécessaire pour contenir les données de chevauchement des grains. Les chevauchements dépendent de la fréquence, et l'espace requis dépend de la valeur maximale de xfund * kdur. La surestimation de cet espace n'induit pas de coût de calcul supplémentaire. Chaque iolap utilise moins de 50 octets de mémoire.

ifna, ifnb -- numéro de table de deux fonctions. La première est une table sinus pour la synthèse des grains FOF (une taille d'au moins 4096 est recommandée). La seconde est une forme ascendante, utilisée à l'endroit et à l'envers pour dessiner l'attaque et la chute des grains FOF ; cette forme peut être linéaire (GEN07) ou bien sigmoïde (GEN19).

itotdur -- durée totale durant laquelle ce fof sera actif. Fixée normalement à p3. Aucun nouveau grain FOF n'est créé si son kdur n'est pas contenu complètement dans le itotdur restant.

iphs (facultatif, par défaut 0) -- phase initiale du fondamental, exprimée comme une fraction d'une période (0 à 1). La valeur par défaut est 0.

ifmode (facultatif, par défaut 0) -- mode fréquentiel du formant. S'il est nul, chaque grain FOF garde la fréquence xform avec laquelle il a été amorcé. Sinon, chaque grain FOF est influencé par xform en continu. La valeur par défaut est 0.

iskip (facultatif, par défaut 0) -- s'il est non nul, l'initialisation est ignorée (ce qui permet l'utilisation du legato).

Exécution

xamp -- amplitude de crête de chaque grain FOF, observée à la toute fin de son attaque. L'attaque pourra dépasser cette valeur si l'on a une grande largeur de bande (disons Q < 10) et/ou quand les grains FOF se superposent en partie.

xfund -- la fréquence fondamentale (en Hertz) des impulsions qui créent les nouveaux grains FOF.

xform -- la fréquence du formant, c'est-à-dire la fréquence du grain FOF induit par chaque impulsion xfund. Cette fréquence peut être fixe pour chaque grain ou varier en continu (voir ifmode).

koct -- indice d'octaviation, normalement zéro. S'il est supérieur à zéro, il abaisse la fréquence xfund effective en atténuant les grains FOF de rang impair. Les nombres entiers sont des octaves, les fractions sont transitoires.

kband -- la largeur de bande du formant (à -6dB), exprimée en Hz. La largeur de bande détermine la vitesse de décroissance exponentielle du grain FOF, avant l'application de l'enveloppe décrite ci-dessous.

kris, kdur, kdec -- attaque, durée globale et chute (en secondes) du grain FOF. Ces valeurs appliquent une enveloppe à chaque grain, à la manière du générateur de Csound linen mais avec des formes d'attaque et de chute dessinées à partir de l'entrée ifnb. kris détermine en proportion inverse la largeur de jupe (à -40 dB) de la région formantique induite. kdur affecte la densité des chevauchements des grains FOF, et par conséquent la vitesse de calcul. Des valeurs typiques pour une imitation vocale sont 0,003, 0,02, 0,007.

Le générateur fof de Csound est inspiré du codage en C par Michael Clarke du programme CHANT de l'IRCAM (Xavier Rodet et al.). Chaque fof produit un seul formant, et les sorties de quatre ou plus de ceux-ci peuvent être additionnées pour produire une riche imitation vocale. La synthèse fof est une forme spéciale de la synthèse granulaire, et cette implémentation facilite la transformation entre l'imitation vocale et les textures granulaires. La vitesse de calcul dépend de kdur, xfund, et de la densité des chevauchements.

Exemples

Voici un exemple de l'opcode fof. Il utilise le fichier fof.csd.

Exemple 331. Exemple de l'opcode fof.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o fof.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32  
nchnls = 2

instr 1
  ; Combine five formants together to create 
  ; a transformation from an alto-"a" sound
  ; to an alto-"i" sound.
  ; Values common to all of the formants.
  kfund init 261.659
  koct init 0
  kris init 0.003
  kdur init 0.02
  kdec init 0.007
  iolaps = 100
  ifna = 1
  ifnb = 2
  itotdur = p3

  ; First formant.
  k1amp = ampdb(0)
  k1form line 800, p3, 350
  k1band line 80, p3, 50

  ; Second formant.
  k2amp line ampdb(-4), p3, ampdb(-20)
  k2form line 1150, p3, 1700
  k2band line 90, p3, 100

  ; Third formant.
  k3amp line ampdb(-20), p3, ampdb(-30)
  k3form line 2800, p3, 2700
  k3band init 120

  ; Fourth formant.
  k4amp init ampdb(-36)
  k4form line 3500, p3, 3700
  k4band line 130, p3, 150

  ; Fifth formant.
  k5amp init ampdb(-60)
  k5form init 4950
  k5band line 140, p3, 200

  a1 fof k1amp, kfund, k1form, koct, k1band, kris, \
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a2 fof k2amp, kfund, k2form, koct, k2band, kris, \
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a3 fof k3amp, kfund, k3form, koct, k3band, kris, \
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a4 fof k4amp, kfund, k4form, koct, k4band, kris, \
         kdur, kdec, iolaps, ifna, ifnb, itotdur
  a5 fof k5amp, kfund, k5form, koct, k5band, kris, \
         kdur, kdec, iolaps, ifna, ifnb, itotdur

  ; Combine all of the formants together
asig sum (a1+a2+a3+a4+a5) * 13000
     outs asig, asig

endin
</CsInstruments>
<CsScore>
; sine wave
f 1 0 4096 10 1
; sigmoid wave
f 2 0 1024 19 0.5 0.5 270 0.5

i 1 0 1
i 1 2 5	; same but slower
e
</CsScore>
</CsoundSynthesizer>


Les valeurs de formant pour le "a" en voix d'alto proviennent de l'Appendice Valeurs de Formant.

Voir aussi

fof2, Appendice Valeurs de Formant

Crédits

Ajouté dans la version 1 (1990)