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 95. 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 ; Audio out Audio in No messages ;-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o dam.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; 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 = 25000 icomp1 = 0.5 icomp2 = 0.763 irtime = 0.1 iftime = 0.1 a1 dam asig, kthreshold, icomp1, icomp2, irtime, iftime out a1 endin ; Instrument #3, compressed signal. instr 3 ; Use the "beats.wav" audio file. asig soundin "beats.wav" ; Compress the audio signal. kthreshold line 25000, p3, 4410000 icomp1 = 0.5 icomp2 = 0.763 irtime = 0.1 iftime = 0.1 a1 dam asig, kthreshold, icomp1, icomp2, irtime, iftime out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 2 seconds. i 1 0 2 ; Play Instrument #2 for 2 seconds. i 2 2 2 ; Play Instrument #3 for 2 seconds. i 3 4 2 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 mary.wav.
Example 96. An example of the dam opcode expanding an audio signal.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o dam_expanded.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; 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 </CsInstruments> <CsScore> ; Play Instrument #1. i 1 0.0 3.5 ; Play Instrument #2. i 2 3.5 3.5 e </CsScore> </CsoundSynthesizer>
This example expands the audio file “mary.wav”. You should hear a melody repeat twice. The second time, the sound should be louder (expanded) than the first.