dam

dam — A dynamic compressor/expander.

Description

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.

Syntax

ares dam asig, kthreshold, icomp1, icomp2, irtime, iftime

Initialization

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.

Performance

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).

Examples

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.

See Also

compress

Credits

Author: Marc Resibois
Belgium
1997

New in version 3.47