granule — Un générateur de texture par synthèse granulaire plus complexe.
Le générateur unitaire granule est plus complexe que grain, mais il ajoute de nouvelles possibilités.
granule est un générateur unitaire de Csound qui emploie une table d'onde en entrée pour produire une sortie audio par synthèse granulaire. Les données de la table d'onde peuvent être générées par n'importe laquelle des routines GEN telle que GEN01 qui lit un fichier audio. On peut ainsi utiliser un son échantillonné comme source pour les grains. L'implémentation interne comprend jusqu'à 128 voix. Le nombre maximum de voix peut être augmenté en redéfinissant la variable MAXVOICE dans le fichier grain4.h. granule possède son propre générateur de nombres aléatoires pour produire toutes les fluctuations aléatoires des paramètres. Il comprend aussi une fonction de seuil pour scanner la table de fonction source lors de la phase d'initialisation. On peut ainsi facilement ignorer les passages de silence entre les phrases.
Les caractéristiques de la synthèse sont contrôlées par 22 paramètres. xamp est l'amplitude de la sortie et elle peut varier aussi bien au taux audio qu'au taux de contrôle.
ares granule xamp, ivoice, iratio, imode, ithd, ifn, ipshift, igskip, \
igskip_os, ilength, kgap, igap_os, kgsize, igsize_os, iatt, idec \
[, iseed] [, ipitch1] [, ipitch2] [, ipitch3] [, ipitch4] [, ifnenv]
ivoice -- nombre de voix.
iratio -- rapport entre la vitesse du pointeur de lecture et le taux d'échantillonnage de la sortie, par exemple 0,5 donnera une vitesse de lecture moitié de la vitesse originale.
imode -- +1, le pointeur de lecture progresse en avant (direction naturelle du fichier source), -1, en arrière (direction opposée à la direction naturelle du fichier source), ou 0, pour une direction aléatoire.
ithd -- seuil ; lorsque le signal échantillonné dans la table est plus petit que ithd, il est ignoré.
ifn -- numéro de la table de fonction de la source sonore.
ipshift -- contrôle de la transposition. Si ipshift vaut 0, la hauteur sera fixée aléatoirement dans un ambitus d'une octave de part et d'autre de la hauteur de chaque grain. Si ipshift vaut 1, 2, 3 ou 4, on peut fixer jusqu'à quatre hauteurs différentes pour le nombre de voix défini dans ivoice. Les paramètres facultatifs ipitch1, ipitch2, ipitch3 et ipitch4 servent à quantifier les transpositions.
igskip -- décalage initial depuis le début de la table de fonction en sec.
igskip_os -- fluctuation aléatoire du pointeur de lecture en sec, 0 signifiant pas de décalage.
ilength -- longueur de la partie de la table à utiliser à partir de igskip en sec.
igap_os -- fluctuation aléatoire de l'écart en % de la taille de l'écart, 0 signifiant pas de décalage.
igsize_os -- fluctuation aléatoire de la taille du grain en % de la taille du grain, 0 signifiant pas de décalage.
iatt -- attaque de l'enveloppe du grain en % de la taille du grain.
idec -- chute de l'enveloppe du grain en % de la taille du grain.
iseed (facultatif, par défaut 0,5) -- graine pour le générateur de nombre aléatoire.
ipitch1, ipitch2, ipitch3, ipitch4 (facultatif, par défaut 1) -- paramètre de transposition, utilisé lorsque ipshift vaut 1, 2, 3 ou 4. La transposition est réalisée par une technique de pondération temporelle avec interpolation linéaire entre les points. La valeur par défaut de 1 signifie la hauteur originale.
ifnenv (facultatif, par défaut 0) -- numéro de la table de fonction utilisée pour générer la forme de l'enveloppe.
xamp -- amplitude.
kgap -- écart entre les grains en sec.
kgsize -- taille du grain en sec.
granule.csd, marimba.aif et fox.wav Voici un exemple de l'opcode granule. Il utilise les fichiers granule.csd, marimba.aif et fox.wav.
Exemple 430. Exemple de l'opcode granule.
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 ;;;RT audio out ; For Non-realtime ouput leave only the line below: ; -o granule.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; additions by Menno Knevel 2022 sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kenv linseg 0,0.5,1,(p3-0.5),1 ; envelope with attack time of .5 seconds iamp = p4 ivoice = p5 iratio = p6 imode = p7 ithd = p8 ifn = p9 ipshift = p10 igskip = p11 igskipos = p12 ilenght = p13 kgap = p14 igapos = p15 kgsize = p16 igsize_os = p17 iatt = p18 idec = p19 iseed = p20 ipitch1 = p21 ipitch2 = p22 ipitch3 = p23 ipitch4 = p24 a1 granule iamp*kenv, ivoice, iratio, imode, ithd, ifn, ipshift ,igskip ,igskipos , ilenght, kgap ,igapos, kgsize, igsize_os, iatt, idec, iseed, ipitch1, ipitch2, ipitch3, ipitch4 a2 granule iamp*kenv, ivoice, iratio, imode, ithd, ifn, ipshift ,igskip ,igskipos , ilenght, kgap ,igapos, kgsize, igsize_os, iatt, idec, iseed+0.17, ipitch1, ipitch2, ipitch3, ipitch4 outs a1,a2 endin </CsInstruments> <CsScore> f1 0 0 1 "marimba.aif" 0 0 0 f2 0 0 1 "fox.wav" 0 0 0 ; both samples are played back 2 x slower ; p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 [p20 p21 p22 p23 p24] i1 0 10 .25 64 1 0 0 1 4 0 0.005 1 0.01 0 0.02 50 25 25 0.39 1 1.42 0.29 2 ;part of marimba i1 11 20 .37 9 1 0 0 2 0 0 0.005 1 0.01 0 0.02 50 25 25 0.39 1 1.42 0.29 2 ;part of fox e </CsScore> </CsoundSynthesizer>
L'exemple ci-dessus lit un fichier son nommé marimba.aif dans la table de fonction numéro 1, et un second nommé fox.wav dans la table de fonction numéro 2. La première note génère 10 secondes de sortie stéréo à partir de la table de fonction. Dans le fichier de l'orchestre, tous les paramètres nécessaires au contrôle de la synthèse proviennent du fichier de partition. Un générateur de fonction linseg est utilisé pour produire une enveloppe avec une attaque et une chute linéaires de 0,5 secondes. On obtient un effet stéréo par l'utilisation de différentes graines pour les deux appels de la fonction granule. Dans l'exemple, on ajoute 0,17 à p20 (= iseed) avant de le passer au second appel de granule pour s'assurer que toutes les fluctuations aléatoires seront différentes de celles du premier appel.
La seconde note (table de fonction numéro 2) a des paramètres légèrement différents.
Voici la signification des paramètres pour la première note dans le fichier de partition :
Parameter | Interpreted As |
---|---|
p5 (ivoice) | le nombre de voix est fixé à 64 |
p6 (iratio) | fixé à 0,5, on lit la table d'onde deux fois moins vite que le taux de la sortie audio |
p7 (imode) | fixé à 0, le pointeur du grain ne se déplace qu'en avant |
p8 (ithd) | fixé à 0, pas de détection de seuil |
p9 (ifn) | fixé à 1, on utilise la table de fonction numéro 1 |
p10 (ipshift) | fixé à 4, quatre hauteurs différentes seront générées |
p11 (igskip) | fixé à 0 et p12 (igskip_os) est fixé à 0,005, pas de décalage par rapport au début de table d'onde et on utilise une fluctuation aléatoire de 5 ms |
p13 (ilength) | fixé à 1, on n'utilise que 1 seconde de la table d'onde |
p14 (kgap) | fixé à 0,01 et p15 (igap_os) est fixé à 50, on utilise un écart de 10 ms avec une fluctuation aléatoire de 50% |
p16 (kgsize) | fixé à 0,02 et p17 (igsize_os) est fixé à 50, la durée du grain est de 20 ms avec une fluctation aléatoire de 50% |
p18 (iatt) et p19 (idec) | fixés à 25, on applique une attaque et une chute linéaires de 25% au grain |
p20 (iseed) | la graine pour le générateur de nombre aléatoire est fixée à 0,39 |
p21 - p24 | les hauteurs sont fixées à 1, soit la hauteur originale, 1,42 soit une quinte plus haut, 0,29 soit une septième plus bas et enfin 2 soit une octave plus haut. |