This opcode dynamically modifies a gain value applied to the input sound ain by comparing its power level to a given threshold level. The signal will be compressed/expanded with different factors regarding that it is over or under the threshold.
icomp1 -- compression ratio for upper zone.
icomp2 -- compression ratio for lower zone
irtime -- gain rise time in seconds. Time over which the gain factor is allowed to raise of one unit.
iftime -- gain fall time in seconds. Time over which the gain factor is allowed to decrease of one unit.
asig -- input signal to be modified
kthreshold -- level of input signal which acts as the threshold. Can be changed at k-time (e.g. for ducking)
Note on the compression factors: A compression ratio of one leaves the sound unchanged. Setting the ratio to a value smaller than one will compress the signal (reduce its volume) while setting the ratio to a value greater than one will expand the signal (augment its volume).
Because the results of the dam opcode can be subtle, I recommend looking at them in a graphical audio editor program like audacity. audacity is available for Linux, Windows, and the MacOS and may be downloaded from http://audacity.sourceforge.net.
Here is an example of the dam opcode. It uses the files dam.orc, dam.sco, and beats.wav.
Example 15-1. An example of the dam opcode compressing an audio signal.
/* dam.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1, uncompressed signal.
instr 1
; Use the "beats.wav" audio file.
asig soundin "beats.wav"
out asig
endin
; Instrument #2, compressed signal.
instr 2
; Use the "beats.wav" audio file.
asig soundin "beats.wav"
; Compress the audio signal.
kthreshold init 25000
icomp1 = 0.5
icomp2 = 0.763
irtime = 0.1
iftime = 0.1
a1 dam asig, kthreshold, icomp1, icomp2, irtime, iftime
out a1
endin
/* dam.orc */
/* dam.sco */
; Play Instrument #1 for 2 seconds.
i 1 0 2
; Play Instrument #2 for 2 seconds.
i 2 2 2
e
/* dam.sco */
Here is another example of the dam opcode. It uses the files dam_expanded.orc, dam_expanded.sco, and mary.wav.
Example 15-2. An example of the dam opcode expanding an audio signal.
/* dam_expanded.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Instrument #1, normal audio signal.
instr 1
; Use the "mary.wav" audio file.
asig soundin "mary.wav"
out asig
endin
; Instrument #2, expanded audio signal.
instr 2
; Use the "mary.wav" audio file.
asig soundin "mary.wav"
; Expand the audio signal.
kthreshold init 7500
icomp1 = 2.25
icomp2 = 2.25
irtime = 0.1
iftime = 0.6
a1 dam asig, kthreshold, icomp1, icomp2, irtime, iftime
out a1
endin
/* dam_expanded.orc */
/* dam_expanded.sco */
; Play Instrument #1.
i 1 0.0 3.5
; Play Instrument #2.
i 2 3.5 3.5
e
/* dam_expanded.sco */