liveconv
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## liveconv

liveconv — Convolution partitionnée avec réponse impulsionnelle rechargeable dynamiquement.

## Description

Opcode du greffon liveconv.

Convolution partitionnée, calculée efficacement, utilisant une table de fonction comme source de réponse impulsionnelle (RI), semblable à l'opcode ftconv. L'opcode liveconv permet de recharger dynamiquement les données de RI à n'importe quel moment durant la convolution a lieu, contrôlé par le paramètre kupdate. Grâce à la façon dont la RI est mise à jour, l'opération se fait sans artéfact audio dans la sortie de la convolution.

La table de RI est lue partition par partition après le signalement d'une mise à jour. Les premiers ksmps échantillons doivent être disponibles quand l'indicateur de mise à jour est positionné. Le reste de la table peut être rempli en continu lors des passages suivants. Il peut y avoir une nouvelle mise à jour pour chaque partition, permettant jusqu'à ftlen/iplen mises à jour simultanées (ftlen est la longueur de la table de RI).

Le comportement dynamique à faible latence de liveconv le rend idéal pour la convolution avec des réponses impulsionnelles échantillonnées en direct, et/ou les transformations et les modifications en temps réel de la réponse impulsionnelle.

## Syntaxe

    ares liveconv ain, ift, iplen, kupdate, kclear

## Initialisation

ift -- numéro de la table de stockage de la réponse impulsionnelle (RI) pour la convolution. La table peut être remplie avec de nouvelles données à n'importe quel moment durant la convolution.

iplen -- longueur en échantillons de la partition de la réponse impulsionnelle ; doit être une puissance entière de deux. Les faibles valeurs donnent un délai plus court en sortie au prix d'une utilisation plus intensive du CPU.

## Exécution

ain -- signal d'entrée.

ares -- signal de sortie.

kupdate -- indicateur de mise à jour de la table de RI. Si kupdate=1 la table de RI ift est chargée partition par partition, en commençant par la prochaine partition. Si kupdate=-1 la table de RI ift est déchargée (mise à zéro) partition par partition, en commençant par la prochaine partition. Les autres valeurs n'ont aucun effet.

kclear -- indicateur pour effacer tous les tampons internes. Si kclear prend n'importe quelle valeur différente de zéro, les tampons internes sont effacés immédiatement. L'opération n'est pas sans artéfacts.

## Exemple

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

Exemple 512. Exemple de l'opcode liveconv.

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>
    -odac  ;realtime audio out
    </CsOptions>
    <CsInstruments>

    	sr	= 44100
    	nchnls	= 2
    	0dbfs	= 1

    ; empty IR table
    giIR_record 	ftgen	0, 0, 131072, 2, 0

    ; Record impulse response
    instr 13

    p3 		=	ftlen(giIR_record)/sr
    iskip 	=	p4
    irlen 	=	p5
    a1 		diskin2	"fox.wav", 1, iskip

    ; Fill IR table with segment from audio file
    amp 	linseg	0, 0.1, 1, irlen, 1, 0.1, 0, 1, 0
    andx_IR line	0, 1, 1/(ftlen(giIR_record)/sr)
    		tablew	a1*amp, andx_IR, giIR_record, 1
    		outch	1, a1*amp	; output the IR
    ktrig 	init	1
    if ktrig > -1 then
    	chnset	ktrig, "conv_update"
    	ktrig -= 1
    endif

    endin

    ; The convolver
    instr 14

    ain 	diskin2	"beats.wav", 1, 0, 1
    kupdate chnget	"conv_update"
    aconv 	liveconv ain, giIR_record, 2048, kupdate, 0
    		outch	2, aconv*0.009	; output the convolution response
    endin

    </CsInstruments>
    <CsScore>
    ; record impulse response
    ;          skip  IR_dur
    i13	0	1	0.0	0.5
    i13	2	1	0.5	0.5
    i13	4	1	1.0	0.5
    i13	6	1	1.5	0.5
    i13	8	1	2.0	0.75
    i13	10	1	2.38 0.25

    ; convolve
    i14	0.0	11.65

    e

    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

ftconv tvconv pconvolve, convolve,

## Crédits

Auteur : Sigurd Saue, Oeyvind Brandtsegg
2017

Précédent | Niveau supérieur | Suivant
linsegr | Sommaire | locsend