lpreson

lpreson — Resynthétise un signal à partir des données passées en interne par un lpread précédent.

Description

Resynthétise un signal à partir des données passées en interne par un lpread précédent.

Syntaxe

ares lpreson asig

Exécution

asig -- une fonction audio pour piloter la resynthèse.

lpreson reçoit en interne des valeurs produites par un lpread conducteur. lpread reçoit ses valeurs du fichier de contrôle en fonction de la valeur d'entrée ktimpnt (en secondes). Si ktimpnt évolue au taux de l'analyse, il en résulte une synthèse à déroulement temporel normal ; si l'évolution est plus rapide, plus lente ou à taux variable, le déroulement temporel de la synthèse est déformé. A chaque période-k, lpread fait une interpolation entre trames adjacentes pour déterminer plus précisément les valeurs du paramètre présenté en sortie et le réglage des coefficients du filtre (passés en interne à un lpreson) qui le suit.

Le signal d'erreur kerr (entre 0 et 1) provenant de l'analyse prédictive reflète la nature déterministe/aléatoire de la source analysée. Il paraîtra bas pour un matériau tonal (périodique) et plus important pour un matériau bruiteux. La transition de la parole voisée à la parole non-voisée, par exemple, produit une valeur du signal d'erreur d'environ 0.3. Pendant la synthèse, la valeur du signal d'erreur peut être utilisée pour déterminer la nature de la fonction pilotant lpreson : par exemple en arbitrant entre entrée tonale et non-tonale, ou même en déterminant un mélange des deux. Normalement, dans la resynthèse de la parole, l'entrée tonale de lpreson est un signal périodique à large bande ou un train d'impulsions dérivé d'une unité telle que buzz, et la source non-tonale est habituellement dérivée de rand. Cependant, on peut utiliser n'importe quel signal audio comme fonction pilote, la seule exigence de l'analyse étant qu'il ait une réponse plate.

lpfreson est un lpreson dont les formants sont décalés. Son argument kfrqratio est le rapport de décalage de formant par rapport à l'original. Cela permet une synthèse dans laquelle l'objet source modifie sa taille acoustique apparente. lpfreson avec kfrqratio = 1 est équivalent à lpreson.

Générallement, lpreson fournit un moyen de contrôler l'évolution du contenu et de la forme spectrale d'un signal audio composite par le contenu spectral dynamique d'un autre signal. Il peut y avoir n'importe quel nombre de paires lpread/lpreson (ou lpfreson) dans un instrument ou dans un orchestre ; ils peuvent lire depuis le même ou depuis différents fichiers de contrôle indépendamment.

Exemples

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

Exemple 556. Exemple de l'opcode lpreson.

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
-odac  --limiter=0.95   ;;;realtime audio out, limit loud pops
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o lpreson.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

; by Menno Knevel - 2021

ires1  system_i 1,{{ lpanal -a -p40 -h200 -P50  -Q15000 -v1 fox.wav fox_poles.lpc }}  ; pole filter file      
ires2  system_i 1,{{ lpanal    -p40 -h200 -P50  -Q15000 -v1 fox.wav fox_coeff.lpc }}  ; filter coefficient file

instr 1

ilen  filelen "fox.wav"	                  ; length of soundfile
prints "fox.wav = %f seconds\\n",ilen

ktime line 0, p3, p4
krmsr,krmso,kerr,kcps lpread ktime,"fox_poles.lpc"
krmso *= .000007			  ; scale amplitude
asig  buzz krmso, kcps, int(sr/2/kcps), 1 ; max harmonics without aliasing
aout  lpreson asig                        ; Pole file not supported!!
      outs aout, aout
endin

instr 2

aref  diskin "fox.wav", 1                 ; don't play this, but use this as an amplitude reference
ktime line 0, p3, p4
krmsr,krmso,kerr,kcps lpread ktime,"fox_coeff.lpc"
krmso *= .000007			      ; scale amplitude
asig  buzz krmso, kcps, int(sr/2/kcps), 1 ; max harmonics without aliasing
aout  lpreson asig                        ; Pole file not supported!!
abal  balance2 aout, aref                 ; use amplitude of diskin as reference       
      outs abal, abal
endin

</CsInstruments>
<CsScore>
; sine
f1 0 4096 10 1
s
;          dur
i 1 0 2.8   1      ; first words of fox_poles.lpc 
i 1 4 2.8   2.756  ; whole sentence
s
i 2 0 2.8   1      ; first words of fox_coeff.lpc  
i 2 4 2.8   2.756  ; whole sentence

e
</CsScore>
</CsoundSynthesizer>


Voici un autre exemple de l'opcode lpreson. Il utilise le fichier lpreson-2.csd.

Exemple 557. Un autre exemple de l'opcode lpreson.

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
-odac  --limiter=0.95   ;;;realtime audio out & limit loud pops
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o lpreson-2.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

; by Menno Knevel - 2021
;works with or without -a option when analyzing "fox.wav" from the manual
;both options sound a little different
ires  system_i 1,{{ lpanal -a -p40 -h200 -P50  -Q15000 -v1 fox.wav fox_poles.lpc }}  ; pole filter file

instr 1

ilen   filelen "fox.wav"	;length of soundfile 1
prints "fox.wav = %f seconds\\n",ilen

ktime  line 0, p3, ilen
krmsr,krmso,kerr,kcps lpread ktime,"fox_poles.lpc"
krmso  *= .000085             ; scale amplitude
asig   diskin2	"flute.aiff", p4     ; use pitch deifferences from the flute
asig   *= krmso             ; & use the scaled back "krmso"
aout   lpreson asig
ares   balance aout, asig
       outs ares, ares

endin
</CsInstruments>
<CsScore>
s 
;             pitch
i 1 0 2.756     1
i 1 3 2.756     1.5
s
i 1 0 2.756     1      ; chord
i 1 0 2.756     .7
i 1 0 2.756     1.3
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

lpfreson, lpread