liveconv — Convolution partitionnée avec réponse impulsionnelle rechargeable dynamiquement.
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.
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.
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.
Voici un exemple de l'opcode liveconv. Il utilise le fichier liveconv.csd.
Exemple 521. 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>