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

## GEN33

GEN33 — Génère des formes d'onde complexes en mélangeant des sinus.

## Description

Ces routines génèrent des formes d'onde complexes en mélangeant des sinus, comme GEN09, mais les paramètres des partiels sont spécifiés dans une table déjà existante, ce qui permet de calculer n'importe quel nombre de partiels dans l'orchestre.

La différence entre GEN33 et GEN34 est que GEN33 utilise la TFR inverse pour générer la sortie, alors que GEN34 est basé sur l'algorithme utilisé dans les opcode oscils. GEN33 ne permet que des partiels entiers, et ne supporte pas les tailles de table égales à une puissance-de-deux plus 1, mais peut être significativement plus rapide avec un grand nombre de partiels. D'un autre côté, avec GEN34, il est possible d'utiliser des numéros de partiel non entiers et un point de garde, et cette routine peut être plus rapide s'il n'y a qu'un petit nombre de partiels (noter que GEN34 est aussi plusieurs fois plus rapide que GEN09, bien que ce dernier soit plus précis).

## Syntaxe

    f # date taille 33 src nh ech [fmode]

## Initialisation

taille -- nombre de points dans la table. Doit être une puissance de deux et au moins 4.

src -- numéro de la table source. Cette table contient les paramètres de chaque partiel dans le format suivant :

ampa, pna, phsa, ampb, pnb, phsb, ...

les paramètres sont :

- ampa, ampb, etc. : amplitude relative des partiels. L'amplitude actuelle dépend de la valeur de ech, ou de la normalisation (si celle-ci est active).

- pna, pnb, etc. : numéro de partiel, ou fréquence, en fonction de fmode (voir ci-dessous) ; zéro et des valeurs négatives sont autorisés, cependant, si la valeur absolue du numéro de partiel dépasse (taille / 2), le partiel ne sera pas rendu. Avec GEN33, le numéro de partiel est arrondi à l'entier le plus proche.

- phsa, phsb, etc. : phase initiale, dans l'intervalle de 0 à 1.

La longueur de la table (sans compter le point de garde) devrait être d'au moins 3 * nh. Si la table est trop courte, le nombre de partiels (nh) est réduit à (longueur de la table) / 3, arrondi vers zéro.

nh -- nombre de partiels. Zéro ou des valeurs négatives sont autorisés, et donnent une table vide (silence). Le nombre effectif peut être diminué si la table source (src) est trop courte, ou si certains partiels ont une fréquence trop haute.

ech -- échelle d'amplitude.

fmode (facultatif, défaut = 0) -- une valeur non nulle indique que les fréquences sont en Hz au lieu de numéros de partiel dans la table source. Le taux d'échantillonage est supposé être fmode si celui-ci est positif, ou -(sr * fmode) si une valeur négative est spécifiée.

## Exemples

Voici un exemple de la routine GEN33. Il utilise le fichier gen33.csd.

Exemple 1152. Exemple de la routine GEN33.

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

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

    instr 1	; partials 1, 4, 7, 10, 13, 16, etc. with base frequency of 400 Hz

    ibsfrq  =  400
    inumh   =  int(1.5 + sr * 0.5 / (3 * ibsfrq))					; estimate number of partials
    isrcln  =  int(0.5 + exp(log(2) * int(1.01 + log(inumh * 3) / log(2))))		; source table length
    itmp    ftgen 1, 0, isrcln, -2, 0						; create empty source table
    ifpos   =  0
    ifrq    =  ibsfrq
    inumh   =  0
    l1:
            tableiw ibsfrq / ifrq, ifpos, 1						; amplitude
            tableiw ifrq, ifpos + 1, 1						; frequency
            tableiw 0, ifpos + 2, 1							; phase
    ifpos   =  ifpos + 3
    ifrq    =  ifrq + ibsfrq * 3
    inumh   =  inumh + 1
            if (ifrq < (sr * 0.5)) igoto l1

    itemp   ftgen 2, 0, 262144, -33, 1, inumh, 1, -1				; store output in ftable 2 (size = 262144)
    asig    poscil .5, ibsfrq, itemp
            outs asig, asig

    endin
    </CsInstruments>
    <CsScore>

    i 1 0 2

    e
    </CsScore>
    </CsoundSynthesizer>

Voici le diagramme de la forme d'onde générée par GEN33, utilisé dans l'exemple :

f 2 0 262144 -33 1 inumh 1 -1

## Voir aussi

GEN09, GEN34

## Crédits

Programmeur : Istvan Varga
Mars 2002

Nouveau dans la version 4.19

Précédent | Niveau supérieur | Suivant
GEN32 | Sommaire | GEN34