nlfilt2 — A filter with a non-linear effect and blowup protection.
Implements the filter:
Y{n} =tanh(a Y{n-1} + b Y{n-2} + d Y^2{n-L} + X{n} - C)
described in Dobson and Fitch (ICMC'96) as modified by Risto Holopainen.
Non-linear effect. The range of parameters are:
a = b = 0
d = 0.8, 0.9, 0.7
C = 0.4, 0.5, 0.6
L = 20
This affects the lower register most but there are audible effects over the whole range. We suggest that it may be useful for coloring drums, and for adding arbitrary highlights to notes.
Low Pass with non-linear. The range of parameters are:
a = 0.4
b = 0.2
d = 0.7
C = 0.11
L = 20, ... 200
There are instability problems with this variant but the effect is more pronounced of the lower register, but is otherwise much like the pure comb. Short values of L can add attack to a sound.
High Pass with non-linear. The range of parameters are:
a = 0.35
b = -0.3
d = 0.95
C = 0,2, ... 0.4
L = 200
High Pass with non-linear. The range of parameters are:
a = 0.7
b = -0.2, ... 0.5
d = 0.9
C = 0.12, ... 0.24
L = 500, 10
The high pass version is less likely to oscillate. It adds scintillation to medium-high registers. With a large delay L it is a little like a reverberation, while with small values there appear to be formant-like regions. There are arbitrary color changes and resonances as the pitch changes. Works well with individual notes.
Warning | |
---|---|
The "useful" ranges of parameters are not yet mapped. |
Here is an example of the nlfilt2 opcode. It uses the file nlfilt2.csd.
Example 540. Example of the nlfilt2 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 ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o nlfilt.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;unfiltered noise asig rand .7 outs asig, asig endin instr 2 ;filtered noise ka = p4 kb = p5 kd = p6 kC = p7 kL = p8 asig rand .3 afilt nlfilt2 asig, ka, kb, kd, kC, kL outs afilt, afilt endin </CsInstruments> <CsScore> i 1 0 2 ; unfiltered ; a b d C L i 2 2 2 0 0 0.8 0.5 20 ; non-linear effect i 2 + 2 .4 0.2 0.7 0.11 200 ; low=pass with non-linear i 2 + 2 0.35 -0.3 0.95 0.1 200 ; high-pass with non-linear i 2 + 2 0.7 -0.2 0.9 0.2 20 ; high-pass with non-linear e </CsScore> </CsoundSynthesizer>