granule

granule — Un générateur de texture par synthèse granulaire plus complexe.

Description

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.

Syntaxe

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]

Initialisation

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.

Exécution

xamp -- amplitude.

kgap -- écart entre les grains en sec.

kgsize -- taille du grain en sec.

Exemples

Voici un exemple de l'opcode granule. Il utilise les fichiers granule.csd, et mary.wav.

Exemple 391. 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           -iadc     -d     ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o granule.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
kr = 4410
ksmps = 10
nchnls = 2
instr 1
;
k1      linseg 0,0.5,1,(p3-p2-1),1,0.5,0
a1      granule p4*k1,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,\
        p16,p17,p18,p19,p20,p21,p22,p23,p24
a2      granule p4*k1,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,\
        p16,p17,p18,p19, p20+0.17,p21,p22,p23,p24
outs a1,a2
endin


</CsInstruments>
<CsScore>

; f statement read sound file mary.wav in the SFDIR 
; directory into f-table 1
f1      0 262144 1 "mary.wav" 0 0 0
i1      0 10 2000 64 0.5 0 0 1 4 0 0.005 5 0.01 50 0.02 50 30 30 0.39 \
        1 1.42 0.29 2
e


</CsScore>
</CsoundSynthesizer>


L'exemple ci-dessus lit un fichier son nommé mary.wav dans la table de fonction numéro 1 en gardant 262 144 échantillons. Il génère 10 secondes de sortie stéréo à partir de la table de fonction. Dans le fichier orchestre, tous les paramètres nécessaires au contrôle de la synthèse proviennent du fichier 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 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.

Voici la signification des paramètres dans le fichier 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é à 5, on n'utilise que 5 secondes 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 à 30, on applique une attaque et une chute linéaires de 30% 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.

Crédits

Auteur : Allan Lee

Belfast

1996

Nouveau dans la version 3.35