tvconv — A time-varying convolution (FIR filter) opcode.

An opcode that takes two incoming signals and interprets one of them as the coefficients of linear time-variable finite impulse response filter. This is implemented via direct convolution (for partition sizes of 1 sample) or DFT-based partitioned convolution. The signals can be 'frozen' (i.e. the filter coefficients are kept the same) at any point in time, at a-rate or k-rate.

*iparts* -- partition size, for sizes > 1, a
DFT-based partitioned convolution process is used. Otherwise a
time-domain delay line FIR is implemented. Partition sizes > 1
are rounded to the nearest power-of-two.

*ifils* -- filter size. For partition sizes >
1, filter sizes are rounded to the nearest power-of-two. With
partition size = 1, since direct convolution is used, filters
can be of any size.

*ares* -- audio output.

*asig1, asig2* -- audio inputs.

*xfreez1* -- freeze switch for
asig1. Coefficients are only updated (ie. the signal is passing
into the convolution) if xfreez1 > 0. This input can take an
audio or a k-rate signal, or a constant.

*xfreez2* -- freeze switch for
asig2, similar to xfreez1 in operation.

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

**Example 1135. Example of the tvconv opcode.**

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

<CsoundSynthesizer> <CsOptions> -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 asig diskin "fox.wav",1,0,1 air diskin "beats.wav",1,0,1 air buthp air/0dbfs,1000 k1 linseg 0,p3/3,0,0,1,2*p3/3,1 a1 oscili k1, 0.5, 1 a2 oscili k1, 0.6, 1 asig tvconv asig,air,1-a2,1-a1,256,1024 asig clip asig,1,0dbfs outs asig, asig endin </CsInstruments> <CsScore> f1 0 1024 7 0 512 0 1 1 511 1 i1 0 30 e </CsScore> </CsoundSynthesizer>