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

## ftconv

ftconv — Convolution multi-canaux à faible latence, utilisant une table de fonction pour la réponse impulsionnelle.

## Description

Convolution multi-canaux à faible latence, utilisant une table de fonction pour la réponse impulsionnelle. L'algorithme divise la réponse impulsionnelle en morceaux dont la longueur est déterminée par le paramètre iplen, et retarde et mixe ces morceaux de façon à ce que la réponse impulsionnelle originale soit reconstruite sans lacunes. Le délai de la sortie (latence) est de iplen échantillons et ne dépend pas du taux de contrôle, à la différence des autre opcodes de convolution.

## Syntaxe

    a1[, a2[, a3[, ... a8]]] ftconv ain, ift, iplen[, iskipsamples \
          [, iirlen[, iskipinit]]]

## Initialisation

ift -- numéro de la ftable source. La table doit contenir les données audio des différents canaux, entrelacées, avec un nombre de canaux égal au nombre de variables de sortie ((a1, a2, etc.). On peut créer une table entrelacée à partir d'un ensemble de tables mono avec GEN52.

iplen -- longueur des morceaux de réponse impulsionnelle en trames d'échantillon ; doit être une puissance entière de deux. Avec de faibles valeurs on aura un délai de sortie plus court, mais au prix d'une utilisation accrue du CPU.

iskipsamples (facultatif, 0 par défaut) -- nombre de trames d'échantillon à ignorer au début de la table. Utile pour les réponses de réverbération possédant un délai initial. Si ce délai n'est pas inférieur à iplen échantillons, en affectant à iskipsamples la même valeur que iplen, on éliminera toute latence supplémentaire de ftconv.

iirlen (facultatif) -- longueur totale de la réponse impulsionnelle en trames d'échantillon. Par défaut, on utilise toutes les données de la table (sans le point de garde).

iskipinit (facultatif, 0 par défaut) -- s'il a une valeur non nulle, l'initialisation est ignorée lorsque cela est possible sans causer d'erreur.

## Exécution

ain -- signal d'entrée

a1 ... a8 -- signaux de sortie.

## Exemples

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

Example 329. Exemple de l'opcode ftconv.

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
    -odac           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o ftconv.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>
    sr      =  48000
    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>

## Voir aussi

pconvolve, convolve, dconv.

## Crédits

Auteur : Istvan Varga
2005

Prev | Up | Next
ftchnls | Home | ftcps