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

## GEN52

GEN52 — Crée une table à plusieurs canaux entrelacés à partir des tables source spécifiées, dans le format attendu par l'opcode ftconv.

## Description

GEN52 crée une table à plusieurs canaux entrelacés à partir des tables source spécifiées, dans le format attendu par l'opcode ftconv. Il peut aussi être utilisé pour extraire un canal d'une table multicanaux et le stocker dans une table mono normale, copier des tables en omettant certains échantillons, ajouter un délai, ou stocker en ordre inverse, etc.

Il faut donner trois paramètres pour chaque canal à traiter. fsrc déclare le numéro de la f-table source. Le paramètre offset spécifie un décalage pour le fichier source. S'il est différent de 0, le fichier source n'est pas lu depuis le début, un nombre offset de valeurs étant ignorées. L'offset est utilisé pour déterminer le numéro de canal à lire depuis les f-tables entrelacées, par exemple pour le canal 2, offset doit valoir 1. Il peut aussi être utilisé pour fixer un décalage de lecture sur la table source. Ce paramètre donne des valeurs absolues, si bien que si l'on désire un décalage de 20 unités d'échantillonnage pour une f-table à deux canaux, offset doit valoir 40. Le paramètre srcchnls est utilisé pour fixer le nombre de canaux dans la f-table source. Ce paramètre fixe la taille du pas de progression lors de la lecture de la f-table source.

Quand il y a plus d'un canal (nchannels > 1), les f-tables source sont entrelacées dans la table nouvellement créée.

Si la f-table source est finie avant que la f-table destination ne soit remplie, les valeurs restantes sont fixées à 0.

## Syntaxe

    f # date taille 52 ncanaux fsrc1 offset1 srcchnls1 [fsrc2 offset2 srcchnls2 ... fsrcN offsetN srcchnlsN]

## Exemples

    ; tables sources
    f 1 0 16384 10 1
    f 2 0 16384 10 0 1
    ; crée une table avec 2 canaux entrelacés
    f 3 0 32768 -52 2 1 0 1 2 0 1
    ; extrait le premier canal de la table 3
    f 4 0 16384 -52 1 3 0 2
    ; extrait le second canal de la table 3
    f 5 0 16384 -52 1 3 1 2

Voici un exemple complet de la routine GEN52. Il utilise le fichier gen52.csd.

Exemple 1159. Exemple de la routine GEN52.

Voir les sections Audio en Temps Réel et Options de 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 gen52.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

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

    garvb   init 0
    gaW     init 0
    gaX     init 0
    gaY     init 0

    itmp    ftgen  1, 0, 64, -2, 2, 40, -1, -1, -1, 123,           \
                   1, 13.000, 0.05, 0.85, 20000.0, 0.0, 0.50, 2,   \
                   1,  2.000, 0.05, 0.85, 20000.0, 0.0, 0.25, 2,   \
                   1, 16.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,   \
                   1,  9.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,   \
                   1, 12.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2,   \
                   1,  8.000, 0.05, 0.85, 20000.0, 0.0, 0.35, 2

    itmp    ftgen 2, 0, 262144, -2, 0
            spat3dt 2, -0.2, 1, 0, 1, 1, 2, 0.005

    itmp    ftgen 3, 0, 262144, -52, 3, 2, 0, 4, 2, 1, 4, 2, 2, 4

    instr 1

    a1      vco2 1, 440, 10
    kfrq    port 100, 0.008, 20000
    a1      butterlp a1, kfrq
    a2      linseg 0, 0.003, 1, 0.01, 0.7, 0.005, 0, 1, 0
    a1      =  a1 * a2 * 2
            denorm a1
            vincr garvb, a1
    aw, ax, ay, az  spat3di a1, p4, p5, p6, 1, 1, 2
            vincr gaW, aw
            vincr gaX, ax
            vincr gaY, ay

    endin

    instr 2

           denorm garvb
    ; skip as many samples as possible without truncating the IR
    arW, arX, arY   ftconv garvb, 3, 2048, 2048, (65536 - 2048)
    aW      =  gaW + arW
    aX      =  gaX + arX
    aY      =  gaY + arY
    garvb   =  0
    gaW     =  0
    gaX     =  0
    gaY     =  0

    aWre, aWim      hilbert aW
    aXre, aXim      hilbert aX
    aYre, aYim      hilbert aY
    aWXr    =  0.0928*aXre + 0.4699*aWre
    aWXiYr  =  0.2550*aXim - 0.1710*aWim + 0.3277*aYre
    aL      =  aWXr + aWXiYr
    aR      =  aWXr - aWXiYr

           outs aL, aR

    endin

    </CsInstruments>
    <CsScore>

    i 1 0 0.5  0.0  2.0 -0.8
    i 1 1 0.5  1.4  1.4 -0.6
    i 1 2 0.5  2.0  0.0 -0.4
    i 1 3 0.5  1.4 -1.4 -0.2
    i 1 4 0.5  0.0 -2.0  0.0
    i 1 5 0.5 -1.4 -1.4  0.2
    i 1 6 0.5 -2.0  0.0  0.4
    i 1 7 0.5 -1.4  1.4  0.6
    i 1 8 0.5  0.0  2.0  0.8
    i 2 0 10
    e

    </CsScore>
    </CsoundSynthesizer>

Voici le diagramme de la forme d'onde de la routine GEN52 utilisée dans l'exemple :

f 3 0 262144 -52 3 2 0 4 2 1 4 2 2 4

## Crédits

Auteur : Istvan Varga

Précédent | Niveau supérieur | Suivant
GEN51 | Sommaire | GENtanh