Implementation of modified hyperbolic tangent distortion. distort1 can be used to generate wave shaping distortion based on a modification of the tanh function.
exp(asig * (pregain + shape1)) - exp(asig*(pregain+shape2))
aout = -----------------------------------------------------------
exp(asig*pregain) + exp(-asig*pregain)
asig - is the input signal.
kpregain -- determines the amount of gain applied to the signal before waveshaping. A value of 1 gives slight distortion.
kpostgain -- determines the amount of gain applied to the signal after waveshaping.
kshape1 -- determines the shape of the positive part of the curve. A value of 0 gives a flat clip, small positive values give sloped shaping.
kshape2 -- determines the shape of the negative part of the curve.
Here is an example of the distort1 opcode. It uses the files distort1.orc and distort1.sco.
Example 15-1. Example of the distort1 opcode.
/* distort1.orc */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 2
gadist init 0
instr 1
iamp = p4
ifqc = cpspch(p5)
asig pluck iamp, ifqc, ifqc, 0, 1
gadist = gadist + asig
endin
instr 50
kpre init p4
kpost init p5
kshap1 init p6
kshap2 init p7
aout distort1 gadist, kpre, kpost, kshap1, kshap2
outs aout, aout
gadist = 0
endin
/* distort1.orc */
/* distort1.sco */
; Sta Dur Amp Pitch
i1 0.0 3.0 10000 6.00
i1 0.5 2.5 10000 7.00
i1 1.0 2.0 10000 7.07
i1 1.5 1.5 10000 8.00
; Sta Dur PreGain PostGain Shape1 Shape2
i50 0 3 2 1 0 0
e
/* distort1.sco */