fof — Produit des grains FOF (sinusoïde amortie) pour la synthèse par formant et la synthèse granulaire.
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.
ares fof xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \
ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]
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).
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.
Voici un exemple de l'opcode fof. Il utilise le fichier fof.csd.
Exemple 190. 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 ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o fof.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Combine five formants together to create ; an alto-"a" 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 = 14850 ifna = 1 ifnb = 2 itotdur = p3 ; First formant. k1amp = ampdb(0) k1form init 800 k1band init 80 ; Second formant. k2amp = ampdb(-4) k2form init 1150 k2band init 90 ; Third formant. k3amp = ampdb(-20) k3form init 2800 k3band init 120 ; Fourth formant. k4amp = ampdb(-36) k4form init 3500 k4band init 130 ; Fifth formant. k5amp = ampdb(-60) k5form init 4950 k5band init 140 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. out (a1+a2+a3+a4+a5) * 16384 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 4096 10 1 ; Table #2. f 2 0 1024 19 0.5 0.5 270 0.5 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
Les valeurs de formant pour le "a" en voix d'alto proviennent de
l'Appendice Valeurs de Formant.