dam — A dynamic compressor/expander.
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. Play dam.csd, and beats.wav
Example 202. An example of the dam opcode compressing an audio signal.
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 ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o dam.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;normal audio asig diskin2 "beats.wav", 1, 0, 1 outs asig, asig endin instr 2 ; compressed audio kthreshold = 0.2 icomp1 = 0.8 icomp2 = 0.2 irtime = 0.01 iftime = 0.5 asig diskin2 "beats.wav", 1, 0, 1 asig dam asig, kthreshold, icomp1, icomp2, irtime, iftime outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 8.5 e </CsScore> </CsoundSynthesizer>
This example compresses the audio file “beats.wav”. You should hear a drum pattern repeat twice. The second time, the sound should be quieter (compressed) than the first.
Here is another example of the dam opcode. Play dam_expanded.csd, and beats.wav
Example 203. An example of the dam opcode expanding an audio signal.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o dam_expanded.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 asig diskin2 "beats.wav", 1, 0, 1 outs asig, asig endin instr 2 ;expanded audio kthreshold = .5 icomp1 = 2 icomp2 = 3 irtime = 0.01 iftime = 0.1 asig diskin2 "beats.wav", 1, 0, 1 asig dam asig, kthreshold, icomp1, icomp2, irtime, iftime outs asig*.2, asig*.2 ;adjust volume of expanded beat endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 6.5 e </CsScore> </CsoundSynthesizer>
This example expands the audio file “beats.wav”. You should hear a drum pattern repeat twice. The second time, the sound should be louder (expanded) than the first. To prevent distortion the volume of the signal has been lowered.