GEN30
Précédent | Instructions de partition et routines GEN | Suivant

## GEN30

GEN30 — Génère des partiels harmoniques en analysant une table existante.

## Description

Extrait un sous-ensemble de la série harmonique d'une forme d'onde existante.

## Syntaxe

    f # date taille 30 src minh maxh [ref_sr] [interp]

## Exécution

src -- ftable source

minh -- numéro de l'harmonique le plus bas

maxh -- numéro de l'harmonique le plus haut

ref_sr (facultatif) -- maxh est pondéré par (sr / ref_sr). La valeur par défaut de ref_sr est sr. Si ref_sr est nul ou négatif, il est ignoré.

interp (facultatif) -- si différent de zéro, permet de changer l'amplitude des harmoniques le plus bas et le plus haut en fonction de la partie fractionnaire de minh et maxh. Par exemple, si maxh vaut 11.3 alors le 12ème harmonique est ajouté avec une amplitude de 0.3. Ce paramètre vaut zéro par défaut.

GEN30 ne supporte pas les tables avec un point de garde (c'est-à-dire une taille de table = puissance-de-deux + 1). Bien que de telles tables fonctionnent aussi bien en entrée qu'en sortie, lors de la lecture d'une table source, le point de garde est ignoré, et lors de l'écriture de la table en sortie, le point de garde est simplement copié du premier échantillon (index de table = 0).

La raison de cette limitation est que GEN30 utilise la TFR, qui nécessite que la taille de table soit une puissance de deux. GEN32 permet l'utilisation de l'interpolation linéaire pour le rééchantillonage et le déphasage, ce qui rend possible l'utilisation de n'importe quelle taille de table (cependant, pour les partiels calculés par TFR, la limitation de la puissance de deux existe toujours).

## Examples

Voici un exemple de la routine GEN30. Il utilise le fichier gen30.csd.

Exemple 1293. Exemple de la routine GEN30.

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     ;;;realtime audio out
    ; For Non-realtime ouput leave only the line below:
    ; -o gen30.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    ;a simplified example of Istvan Varga
    sr =  44100
    ksmps =  32
    nchnls =  2
    0dbfs   = 1

    isaw	ftgen 1, 0, 16384, 7, 1, 16384, -1						;sawtooth wave
    iFM	ftgen 3, 0, 4096, 7, 0, 512, 0.25, 512, 1, 512, 0.25, 512,	\
    			     0, 512, -0.25, 512, -1, 512, -0.25, 512, 0			;FM waveform
    iAM	ftgen 4, 0, 4096, 5, 1, 4096, 0.01						;AM waveform
    iEQ	ftgen 5, 0, 1024, 5, 1, 512, 32, 512, 1						;FM to EQ
    isine	ftgen 6, 0, 1024, 10, 1								;sine wave

    /* generate bandlimited sawtooth waves */
    i0	=  0
    loop1:
    imaxh	=  sr / (2 * 440.0 * exp(log(2.0) * (i0 - 69) / 12))
    i_	ftgen i0 + 10, 0, 4096, -30, 1, 1, imaxh					;use gen 30
    i0	=  i0 + 1
    	if (i0 < 127.5) igoto loop1

    instr 1

    kcps	=  440.0 * exp(log(2.0) * (p4 - 69) / 12)					;note frequency
    klpmaxf	limit p5 * kcps, 1000.0, 12000.0						;lowpass max. frequency

    kfmd1	=  0.03 * kcps									;FM depth in Hz
    kamfr	=  kcps * 0.02									;AM frequency
    kamfr2	=  kcps * 0.1

    kfnum	=  (10 + 69 + 0.5 + 12 * log(kcps / 440.0) / log(2.0))				;table number
    aenv	linseg 0, p3*0.25, 1, p3*0.75, 0						;amp. envelope

    asig	oscbnk kcps, 0.0, kfmd1, 0.0, 40, 200, 0.1, 0.2, 0, 0, 144,	      \
    		0.0, klpmaxf, 0.0, 0.0, 1.5, 1.5, 2, kfnum, 3, 0, 5, 5, 5
    asig	= asig * aenv*.03
    outs asig, asig

    endin

    </CsInstruments>
    <CsScore>
    s
    i 1 0 6 41 10
    i 1 0 6 60
    i 1 0 6 65
    i 1 0 6 69
    s
    i 1 0 6 41 64
    i 1 0 6 60
    i 1 0 6 65
    i 1 0 6 69

    e
    </CsScore>
    </CsoundSynthesizer>

## Crédits

Auteur : Istvan Varga

Nouveau dans la version 4.16

Précédent | Niveau supérieur | Suivant
GEN28 | Sommaire | GEN31