Signal Modifiers: Convolution and Morphing

## dconv

ar **dconv** asig, isize, ifn

### Description

Output is the result of two signals directly convolved together, not the spectral based method of the **convolve** opcode.

### Initialization

*isize* – the size of the convolution buffer to use. If the buffer size is smaller than the size of *ifn*, then only the first *isize* values will be used from the table.

*ifn* – table number of a stored function containing the impulse response for convolution. If the size of *ifn* is smaller than *isize*, then *isize* will be adjusted accordingly.

### Performance

*ar* – a-rate signal to be convolved

Rather than the analysis/resynthesis method of the **convolve** opcode, **dconv** uses direct convolution to create the result. For small tables it can do this quite efficiently, however larger tables require much more time to run. **dconv** does *isize* * **ksmps** multiplies on every k-cycle. Therefore, reverb and delay effects are best done with other opcodes (unless the times are short).

**dconv** was designed to be used with time varying tables to facilitate new real-time filtering capabilities.

### Example

/* dconvtest.orc */
**sr** = 44100
**kr** = 4410
**ksmps** = 10
**nchnls** = 1
#define RANDI(A) #kout randi 1, kfq, $A*.001+iseed, 1
tablew kout, $A, itable#
**instr** 1
itable **init** 1
iseed **init** .6
isize **init** **ftlen**(itable)
kfq **line** 1, p3, 10
$RANDI(0)
$RANDI(1)
$RANDI(2)
$RANDI(3)
$RANDI(4)
$RANDI(5)
$RANDI(6)
$RANDI(7)
$RANDI(8)
$RANDI(9)
$RANDI(10)
$RANDI(11)
$RANDI(12)
$RANDI(13)
$RANDI(14)
$RANDI(15)
asig **rand** 10000, .5, 1
asig **butlp** asig, 5000
asig **dconv** asig, isize, itable
**out** asig *.5
**endin**
/* dconvtest.orc */
/* dconvtest.sco */
**f**1 0 16 10 1
**i**1 0 10
**e**
/* dconvtest.sco */

### Author

William "Pete" Moss

University of Texas at Austin

Austin, Texas USA

March, 2001

New in Csound 4.12

Signal Modifiers: Convolution and Morphing