liveconv

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

Description

Opcode de greffon dans 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 487. 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