lpreson

lpreson — Resynthesises a signal from the data passed internally by a previous lpread.

Description

Resynthesises a signal from the data passed internally by a previous lpread.

Syntax

ares lpreson asig

Performance

asig -- an audio driving function for resynthesis.

lpreson receives values internally produced by a leading lpread.lpread gets its values from the control file according to the input value ktimpnt (in seconds). If ktimpnt proceeds at the analysis rate, time-normal synthesis will result; proceeding at a faster, slower, or variable rate will result in time-warped synthesis. At each k-period, lpread interpolates between adjacent frames to more accurately determine the parameter values (presented as output) and the filter coefficient settings (passed internally to a subsequent lpreson).

The error signal kerr (between 0 and 1) derived during predictive analysis reflects the deterministic/random nature of the analyzed source. This will emerge low for pitched (periodic) material and higher for noisy material. The transition from voiced to unvoiced speech, for example, produces an error signal value of about .3. During synthesis, the error signal value can be used to determine the nature of the lpreson driving function: for example, by arbitrating between pitched and non-pitched input, or even by determining a mix of the two. In normal speech resynthesis, the pitched input to lpreson is a wideband periodic signal or pulse train derived from a unit such as buzz, and the nonpitched source is usually derived from rand. However, any audio signal can be used as the driving function, the only assumption of the analysis being that it has a flat response.

lpfreson is a formant shifted lpreson, in which kfrqratio is the (cps) ratio of shifted to original formant positions. This permits synthesis in which the source object changes its apparent acoustic size. lpfreson with kfrqratio = 1 is equivalent to lpreson.

Generally, lpreson provides a means whereby the time-varying content and spectral shaping of a composite audio signal can be controlled by the dynamic spectral content of another. There can be any number of lpread/lpreson (or lpfreson) pairs in an instrument or in an orchestra; they can read from the same or different control files independently.

Examples

Here is an example of the lpreson opcode. It uses the file lpreson.csd.

Example 573. Example of the lpreson opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<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>


Here is another example of the lpreson opcode. It uses the file lpreson-2.csd.

Example 574. Another example of the lpreson opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<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>


See also

Linear Predictive Coding (LPC) Resynthesis