grain2
Prev | Opcodes et opérateurs de l'orchestre | Next

## grain2

grain2 — Générateur de textures par synthèse granulaire facile à utiliser.

## Description

Génère des textures par synthèse granulaire. grain2 est plus simple à utiliser, mais grain3 offre plus de contrôle.

## Syntaxe

    ares grain2 kcps, kfmd, kgdur, iovrlp, kfn, iwfn [, irpow] \
          [, iseed] [, imode]

## Initialisation

iovrlp -- (constant) nombre de grains se chevauchant.

iwfn -- table de fonction contenant la forme d'onde d'une fenêtre (utiliser GEN20 pour calculer iwfn).

irpow (facultatif, par défaut 0) -- cette valeur contrôle la variation de la distribution de la fréquence du grain. Si irpow est positif, la distribution aléatoire (x est compris entre -1 et 1) est

abs(x) ^ ((1 / irpow) - 1) ;

pour des valeurs négatives de irpow, elle est

(1 - abs(x)) ^ ((-1 / irpow) - 1)

En fixant irpow à -1, 0, ou 1 on obtiendra une distribution uniforme (dont le calcul est plus rapide). L'image ci-dessous montre quelques exemples pour irpow. La valeur par défaut de irpow est 0.

Un graphique des distributions pour différentes valeurs de irpow.

iseed (facultatif, par défaut 0) -- valeur de la graine du générateur de nombres aléatoires (entier positif compris entre 1 et 2147483646 (231 - 2)). Une valeur nulle ou négative force la graine à prendre la valeur de l'horloge de l'ordinateur (c'est le comportement par défaut).

imode (facultatif, par défaut 0) -- somme de valeurs prises parmi les suivantes :

- 8 : forme d'onde de la fenêtre avec interpolation (plus lent).

- 4 : pas d'interpolation pour la forme d'onde des grains (rapide, mais de moindre qualité).

- 2 : la fréquence des grains est modifiée continuellement par kcps et kfmd (par défaut, chaque grain garde la fréquence avec laquelle il a démarré). Avec des taux de contrôle élevés, ceci peut ralentir le processus.

- 1 : ignorer l'initialisation.

## Exécution

ares -- signal de sortie.

kcps -- fréquence du grain en Hz.

kfmd -- variation aléatoire (bipolaire) de la fréquence du grain en Hz.

kgdur -- durée du grain en secondes. kgdur contrôle aussi la durée des grains déjà actifs (en fait la vitesse à laquelle la fonction fenêtre est lue). Ce comportement ne dépend pas des indicateurs positionnés dans imode.

kfn -- table de fonction contenant la forme d'onde du grain. Le numéro de table peut changer au taux-k (on peut ainsi choisir parmi un ensemble de tables à bande limitée générées par GEN30, afin d'éviter le repliement).

| Note
grain2 utilise en interne le même générateur aléatoire que rnd31. Il est ainsi recommandé de lire également sa documentation.

## Exemples

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

Example 359. Exemple de l'opcode grain2.

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 grain2.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr	=  48000
    kr	=  750
    ksmps	=  64
    nchnls	=  2

    /* square wave */
    i_	ftgen 1, 0, 4096, 7, 1, 2048, 1, 0, -1, 2048, -1
    /* window */
    i_	ftgen 2, 0, 16384, 7, 0, 4096, 1, 4096, 0.3333, 8192, 0
    /* sine wave */
    i_	ftgen 3, 0, 1024, 10, 1
    /* room parameters */
    i_	ftgen 7, 0, 64, -2, 4, 50, -1, -1, -1, 11,			\
    			    1, 26.833, 0.05, 0.85, 10000, 0.8, 0.5, 2,	\
    			    1,  1.753, 0.05, 0.85,  5000, 0.8, 0.5, 2,	\
    			    1, 39.451, 0.05, 0.85,  7000, 0.8, 0.5, 2,	\
    			    1, 33.503, 0.05, 0.85,  7000, 0.8, 0.5, 2,	\
    			    1, 36.151, 0.05, 0.85,  7000, 0.8, 0.5, 2,	\
    			    1, 29.633, 0.05, 0.85,  7000, 0.8, 0.5, 2

    ga01	init 0

    /* generate bandlimited square waves */

    i0	=  0
    loop1:
    imaxh	=  sr / (2 * 440.0 * exp(log(2.0) * (i0 - 69) / 12))
    i_	ftgen i0 + 256, 0, 4096, -30, 1, 1, imaxh
    i0	=  i0 + 1
    	if (i0 < 127.5) igoto loop1

    	instr 1

    p3	=  p3 + 0.2

    /* note velocity */
    iamp	=  0.0039 + p5 * p5 / 16192
    /* vibrato */
    kcps	oscili 1, 8, 3
    kenv	linseg 0, 0.05, 0, 0.1, 1, 1, 1
    /* frequency */
    kcps	=  (kcps * kenv * 0.01 + 1) * 440 * exp(log(2) * (p4 - 69) / 12)
    /* grain ftable */
    kfn	=  int(256 + 69 + 0.5 + 12 * log(kcps / 440) / log(2))
    /* grain duration */
    kgdur	port 100, 0.1, 20
    kgdur	=  kgdur / kcps

    a1	grain2 kcps, kcps * 0.02, kgdur, 50, kfn, 2, -0.5, 22, 2
    a1	butterlp a1, 3000
    a2	grain2 kcps, kcps * 0.02, 4 / kcps, 50, kfn, 2, -0.5, 23, 2
    a2	butterbp a2, 12000, 8000
    a2	butterbp a2, 12000, 8000
    aenv1	linseg 0, 0.01, 1, 1, 1
    aenv2	linseg 3, 0.05, 1, 1, 1
    aenv3	linseg 1, p3 - 0.2, 1, 0.07, 0, 1, 0

    a1	=  aenv1 * aenv3 * (a1 + a2 * 0.7 * aenv2)

    ga01	=  ga01 + a1 * 10000 * iamp

    	endin

    /* output instr */

    	instr 81

    i1	=  0.000001
    aLl, aLh, aRl, aRh	spat3di ga01 + i1*i1*i1*i1, 3.0, 4.0, 0.0, 0.5, 7, 4
    ga01	=  0
    aLl	butterlp aLl, 800.0
    aRl	butterlp aRl, 800.0

    	outs aLl + aLh, aRl + aRh

    	endin

    </CsInstruments>
    <CsScore>

    t 0 60

    i 1 0.0 1.3 60 127
    i 1 2.0 1.3 67 127
    i 1 4.0 1.3 64 112
    i 1 4.0 1.3 72 112

    i 81 0 6.4

    e

    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

grain3

## Crédits

Auteur : Istvan Varga

Nouveau dans la version 4.15

Mise à jour en avril 2002 par Istvan Varga

Prev | Up | Next
grain | Home | grain3