pvslpc — Streaming linear prediction analysis.
This opcode implements streaming linear prediction analysis from an input signal and outputs an fsig, which can be used with other pvs opcodes.
idftsiz -- size of lpc input frame in samples and fsig analysis frame. It needs to be a power-of-two.
iord -- linear predictor order.
ihop -- analysis hop size.
iwin -- window function table number (optional).
This opcode is part of a suite of streaming linear prediction opcodes. It analyses an input signal and produces a set of LPC coefficients for an all-pole filter that models the signal's spectral envelope. The transfer function for this filter is then computed and its magnitude spectrum is output as a streaming phase vocoder signal.
The fundamental analysis parameters are input frame size and filter order. Longer input frames will produce a more accurate result in terms of frequency resolution, but will also involve more computation. This is due to the computation of the autocorrelation function, which is then used in the coefficient computation. This part is more efficient and depends only on the linear prediction order, which is also the number of coefficients computed. Typical lp orders may range from about 30 to 100 coefficients, but larger values can also be used.
The analyses are produced every hopsize samples. Once the signal is extracted from an audio input then it can be optionally windowed if a function table is provided. While this is optional, it is a recommended procedure (GEN20 can provide the most common windows). The signal is then analysed and coefficients produced. The fsig produced by this opcode is given in AMP-FREQ format. The amplitudes contain the spectral envelope of the input signal, and the frequencies are derived from a fundamental frequency estimation computed from the autocorrelation function. These do not represent the frequencies in the input signal to any level of accuracy; they are only placeholders.
Here is an example of the pvslpc opcode using an audio input signal as lpc source. It uses the file pvslpc.csd.
Example 844. Example of the pvslpc 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 ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o pvslpc.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; by Menno Knevel 2021 sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gifw ftgen 0, 0, 1024, 20, 2, 1 ; Hanning window instr 1 iswap = p4 ; decide which sample goes to pvslpc if iswap == 1 then a1 diskin "MSjungleMid.wav", 1, 0, 1 ; first the jungle a2 diskin "fox.wav", 1, 0, 1 prints "\n--**the jungle...**--\n" else a1 diskin "fox.wav", 1, 0, 1 ; then the fox a2 diskin "MSjungleMid.wav", 1, 0, 1 prints "\n--**and the fox...**--\n" endif iorder = p5 fenv pvslpc a1, 1024, 128, p5, gifw fsig pvscale fenv, 1.5 ; convert lpc to pvs, for a3 pvsynth fsig ; scaling basic frequency 1.5 times a3 dcblock a3 outs a3*.1, a3*.1 endin </CsInstruments> <CsScore> ; jungle order i1 0 10 1 10 i1 11 10 1 150 s i1 2 10 0 10 i1 13 10 0 150 e </CsScore> </CsoundSynthesizer>