denorm

denorm — Mixes low level noise to a list of a-rate signals

Description

Mixes low level (~1e-20 for floats, and ~1e-56 for doubles) noise to a list of a-rate signals. Can be used before IIR filters and reverbs to avoid denormalized numbers which may otherwise result in significantly increased CPU usage.

Syntax

denorm a1[, a2[, a3[, ... ]]]

Performance

a1[, a2[, a3[, ... ]]] -- signals to mix noise with

Some processor architectures (particularly Pentium IVs) are very slow at processing extremely small numbers. These small numbers can appear as a result of some decaying feedback process like reverb and IIR filters. Low level noise can be added so that very small numbers are never reached, and they are 'absorbed' by this 'noise floor'.

If CPU usage goes to 100% at the end of reverb tails, or you get audio glitches in processes that should not use too much CPU, using denorm before the culprit opcode or process might solve the problem.

Examples

Here is an example of the denorm opcode. Play denorm.csd

Example 232. Example of the denorm opcode.

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 denorm.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
; slightly simplified example from Istvan Varga 2006
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

garvb init 0

instr 1

a1  oscils 0.6, 440, 0
a2  linsegr 0, 0.005, 1, 3600, 1, 0.08, 0
a1  =  a1 * a2
    vincr garvb, a1
    outs a1, a1
endin

instr 99	;"Always on"

       denorm garvb
aL, aR reverbsc garvb * 0.5, garvb * 0.5, 0.92, 10000
       clear garvb
       outs aL, aR
endin

</CsInstruments>
<CsScore>

i 99 0 -1	;held by a negative p3, means "always on" 
i 1 0 0.5
i 1 4 0.5
e 8		;8 extra seconds after the performance

</CsScore>
</CsoundSynthesizer>


Credits

Author: Istvan Varga
2005