diskgrain

diskgrain — Synthèse granulaire synchrone, utilisant un fichier son comme source.

Description

diskgrain implémente la synthèse granulaire synchrone. La source sonore des grains est obtenue en lisant un fichier son contenant les échantillons de la forme d'onde source.

Syntaxe

asig diskgrain Sfname, kamp, kfreq, kpitch, kgrsize, kprate, \
      ifun, iolaps [,imaxgrsize , ioffset]

Initialisation

Sfilename -- fichier son source.

ifun -- table de fonction de l'enveloppe de grain.

iolaps -- nombre maximum de chevauchements, max(kfreq)*max(kgrsize). Une grande valeur d'estimation ne devrait pas affecter l'exécution, mais le dépassement de cette valeur aura probablement des conséquences désastreuses.

imaxgrsize -- taille de grain maximale en secondes (par défaut 1.0).

ioffset -- décalage initial en secondes à partir du début du fichier (par défaut 0).

Exécution

kamp -- pondération de l'amplitude

kfreq -- fréquence de génération des grains, ou densité, en grains/sec.

kpitch -- transposition de hauteur des grains (1 = hauteur normale, < 1 plus bas, > 1 plus haut ; négatif, lecture à l'envers)

kgrsize -- taille de grain en secondes.

kprate -- vitesse du pointeur de lecture, en grains. Une valeur de 1 avancera le pointeur de lecture d'un grain dans la table source. Des valeurs supérieures provoqueront une compression temporelle et des valeurs inférieures une expansion temporelle du signal source. Avec des valeurs négatives, le pointeur progressera à l'envers et zéro l'immobilisera.

Le générateur de grain contrôle complètement la fréquence (grains/sec), l'amplitude globale, la hauteur de grain (un incrément de l'échantillonage) et la taille de grain (en secondes), comme paramètres fixes ou variant dans le temps (signaux). La vitesse du pointeur de grain est un paramètre supplémentaire qui contrôle la position à laquelle le générateur commencera à lire les échantillons dans le fichier pour chaque grain successif. Elle est mesurée en fraction de la taille de grain, si bien qu'une valeur de 1 (par défaut) provoquera la lecture de chaque grain successif à partir de l'endroit où le grain précédent s'est terminé. Avec une valeur de 0.5 le grain suivant commencera à la position médiane entre le début et la fin du grain précédent, etc... Avec une valeur de 0 le générateur lit toujours à partir d'une position fixe (quelque soit l'endroit où il se trouvait précédemment). Une valeur négative décrémentera les positions du pointeur. Ce contrôle donne plus de flexibilité pour créer des modifications de l'échelle temporelle pendant la resynthèse.

Diskgrain générera n'importe quel nombre de flux de grain parallèles (en fonction de la densité/fréquence de grain) borné par la valeur de iolaps (par défaut 100). Le nombre de flux (grains se chevauchant) est déterminé par kgrsize*kfreq. Plus il y aura de chevauchements, plus il y aura de calculs ce qui pourra empêcher la synthèse en temps réel (selon la puissance du processeur).

Diskgrain peut simuler une synthèse formantique à la FOF, si on emploie une forme adéquate comme enveloppe de grain et une forme d'onde sinus comme onde de grain. Pour cette utilisation, on peut choisir des tailles de grain d'environ 0.04 secondes. La fréquence centrale du formant est déterminée par la hauteur de grain. Comme celle-ci est exprimée en incrément d'échantillonnage, il faut pondérer cette valeur par tablesize/sr pour obtenir une fréquence en Hz. La fréquence de grain déterminera le fondamental.

Cet opcode est une variation sur l'opcode syncgrain.

[Note] Note
diskgrain n'effectue aucun ré-échantillonage, ce qui produira une transposition de hauteur si le taux d'échantillonage du fichier source est différent de celui de Csound.

Exemples

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

Exemple 236. Exemple de l'opcode diskgrain.

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     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o diskgrain.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; additions by Menno Knevel 2022

sr     = 44100
ksmps  = 32
nchnls = 2
0dbfs  = 1

instr 1

iolaps  = 2
igrsize = 0.04
ifreq   = iolaps/igrsize
ips     = 1/iolaps

istr = p4  /* timescale */
ipitch = p5 /* pitchscale */

a1 diskgrain "marimba.aif", 1, ifreq, ipitch, igrsize, ips*istr, 1, iolaps
prints "\nmarimba is playing....\n\n"
   outs   a1, a1

endin

instr 2

iolaps  = 5
igrsize = 0.1
ifreq   = iolaps/igrsize
ips     = 1/iolaps

istr = p4  /* timescale */
ipitch = p5 /* pitchscale */

a1 diskgrain "singFemale.aif", .5, ifreq, ipitch, igrsize, ips*istr, 1, iolaps
prints "\nFemale is singing....\n\n"
   outs   a1, a1

endin

</CsInstruments>
<CsScore>
f 1 0 8192 20 2 1  ;Hanning function

;           timescale   pitchscale
i 1   0   6     1           1           
i 1   +   6     2           1
i 1   +   6     1          0.75
i 1   +   6     1.5        1.5
i 1   +   6.25  0.5        1.5

;           timescale   pitchscale
i 2   31  4     1           1           
i 2   +   4     2           1
i 2   +   4     1          0.75
i 2   +   5     1.5        1.5
i 2   +   7.9   0.5        1.5
e
</CsScore>
</CsoundSynthesizer>


Crédits

Auteur : Victor Lazzarini
Mai 2007

Nouveau dans Csound 5.06