vcomb
Variably reverberates an input signal with a “colored” frequency response.
Syntax
ares vcomb asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]
Initialization
imaxlpt -- maximum loop time for klpt
iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0.
insmps (optional, default=0) -- delay amount, as a number of samples.
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude).
xlpt -- variable loop time in seconds, same as ilpt in comb. Loop time can be as large as imaxlpt.
This filter reiterates input with an echo density determined by loop time xlpt. The attenuation rate is independent and is determined by krvt, the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). Output will appear only after ilpt seconds.
Examples
Here is an example of the vcomb opcode. It uses the file vcomb.csd.
Example of the vcomb opcode. |
---|
| <CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out Audio in
-odac -iadc -M0 ;;;RT audio I/O with MIDI in
</CsOptions>
<CsInstruments>
; Example by Jonathan Murphy and Charles Gran 2007
sr = 44100
ksmps = 10
nchnls = 2
; new, and important. Make sure that midi note events are only
; received by instruments that actually need them.
; turn default midi routing off
massign 0, 0
; route note events on channel 1 to instr 1
massign 1, 1
; Define your midi controllers
#define C1 #21#
#define C2 #22#
#define C3 #23#
; Initialize MIDI controllers
initc7 1, $C1, 0.5 ;delay send
initc7 1, $C2, 0.5 ;delay: time to zero
initc7 1, $C3, 0.5 ;delay: rate
gaosc init 0
; Define an opcode to "smooth" the MIDI controller signal
opcode smooth, k, k
kin xin
kport linseg 0, 0.0001, 0.01, 1, 0.01
kin portk kin, kport
xout kin
endop
instr 1
; Generate a sine wave at the frequency of the MIDI note that triggered the intrument
ifqc cpsmidi
iamp ampmidi 10000
aenv linenr iamp, .01, .1, .01 ;envelope
a1 oscil aenv, ifqc, 1
; All sound goes to the global variable gaosc
gaosc = gaosc + a1
endin
instr 198 ; ECHO
kcmbsnd ctrl7 1, $C1, 0, 1 ;delay send
ktime ctrl7 1, $C2, 0.01, 6 ;time loop fades out
kloop ctrl7 1, $C3, 0.01, 1 ;loop speed
; Receive MIDI controller values and then smooth them
kcmbsnd smooth kcmbsnd
ktime smooth ktime
kloop smooth kloop
imaxlpt = 1 ;max loop time
; Create a variable reverberation (delay) of the gaosc signal
acomb vcomb gaosc, ktime, kloop, imaxlpt, 1
aout = (acomb * kcmbsnd) + gaosc * (1 - kcmbsnd)
outs aout, aout
gaosc = 0
endin
</CsInstruments>
<CsScore>
f1 0 16384 10 1
i198 0 10000
e
</CsScore>
</CsoundSynthesizer>
|
See also
Reverberation
Credits
Author: William “Pete” Moss
University of Texas at Austin
Austin, Texas USA
January 2002