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

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.

Crédits

Auteur : Allan Lee

Belfast

1996

Nouveau dans la version 3.35