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. It uses the file 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. It uses the file 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.