module Sound.SC3.UGen.Filter where
import Data.List
import Sound.SC3.UGen.Rate
import Sound.SC3.UGen.UGen
allpassN :: UGen -> UGen -> UGen -> UGen -> UGen
allpassN i mt dly dcy = mkFilter "AllpassN" [i, mt, dly, dcy] 1
allpassL :: UGen -> UGen -> UGen -> UGen -> UGen
allpassL i mt dly dcy = mkFilter "AllpassL" [i, mt, dly, dcy] 1
allpassC :: UGen -> UGen -> UGen -> UGen -> UGen
allpassC i mt dly dcy = mkFilter "AllpassC" [i, mt, dly, dcy] 1
ampComp :: UGen -> UGen -> UGen -> UGen
ampComp f r e = mkFilter "AmpComp" [f, r, e] 1
ampCompA :: UGen -> UGen -> UGen -> UGen -> UGen
ampCompA f r ma ra = mkFilter "AmpCompA" [f, r, ma, ra] 1
bpf :: UGen -> UGen -> UGen -> UGen
bpf i freq rq = mkFilter "BPF" [i, freq, rq] 1
bpz2 :: UGen -> UGen
bpz2 i = mkFilter "BPZ2" [i] 1
brf :: UGen -> UGen -> UGen -> UGen
brf i freq rq = mkFilter "BRF" [i, freq, rq] 1
brz2 :: UGen -> UGen
brz2 i = mkFilter "BRZ2" [i] 1
clip :: UGen -> UGen -> UGen -> UGen
clip i l h = mkFilter "Clip" [i, l, h] 1
combN :: UGen -> UGen -> UGen -> UGen -> UGen
combN i mt dly dcy = mkFilter "CombN" [i, mt, dly, dcy] 1
combL :: UGen -> UGen -> UGen -> UGen -> UGen
combL i mt dly dcy = mkFilter "CombL" [i, mt, dly, dcy] 1
combC :: UGen -> UGen -> UGen -> UGen -> UGen
combC i mt dly dcy = mkFilter "CombC" [i, mt, dly, dcy] 1
degreeToKey :: UGen -> UGen -> UGen -> UGen
degreeToKey b i o = mkFilter "DegreeToKey" [b, i, o] 1
decay :: UGen -> UGen -> UGen
decay i dcy = mkFilter "Decay" [i, dcy] 1
decay2 :: UGen -> UGen -> UGen -> UGen
decay2 i atk dcy = mkFilter "Decay2" [i, atk, dcy] 1
delay1 :: UGen -> UGen
delay1 i = mkFilter "Delay1" [i] 1
delay2 :: UGen -> UGen
delay2 i = mkFilter "Delay2" [i] 1
delayC :: UGen -> UGen -> UGen -> UGen
delayC i mt dly = mkFilter "DelayC" [i, mt, dly] 1
delayL :: UGen -> UGen -> UGen -> UGen
delayL i mt dly = mkFilter "DelayL" [i, mt, dly] 1
delayN :: UGen -> UGen -> UGen -> UGen
delayN i mt dly = mkFilter "DelayN" [i, mt, dly] 1
formlet :: UGen -> UGen -> UGen -> UGen -> UGen
formlet i f a d = mkFilter "Formlet" [i, f, a, d] 1
fos :: UGen -> UGen -> UGen -> UGen -> UGen
fos i a0 a1 b1 = mkFilter "FOS" [i, a0, a1, b1] 1
freeVerb :: UGen -> UGen -> UGen -> UGen -> UGen
freeVerb i mx room damp = mkFilter "FreeVerb" [i, mx, room, damp] 1
freeVerb2 :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen
freeVerb2 i1 i2 mx room damp = mkFilter "FreeVerb2" [i1, i2, mx, room, damp] 2
gate :: UGen -> UGen -> UGen
gate i t = mkFilter "Gate" [i, t] 1
hasher :: UGen -> UGen
hasher i = mkFilter "Hasher" [i] 1
hilbert :: UGen -> UGen
hilbert i = mkFilter "Hilbert" [i] 2
hpf :: UGen -> UGen -> UGen
hpf i f = mkFilter "HPF" [i, f] 1
hpz1 :: UGen -> UGen
hpz1 i = mkFilter "HPZ1" [i] 1
hpz2 :: UGen -> UGen
hpz2 i = mkFilter "HPZ2" [i] 1
inRange :: UGen -> UGen -> UGen -> UGen
inRange i lo hi = mkFilter "InRange" [i, lo, hi] 1
klank :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen
klank i fs fp d s = mkFilterMCER [AR] "Klank" [i, fs, fp, d] s 1
klankSpec :: [UGen] -> [UGen] -> [UGen] -> UGen
klankSpec f a p = mce ((concat . transpose) [f, a, p])
lag :: UGen -> UGen -> UGen
lag i t = mkFilter "Lag" [i, t] 1
lag2 :: UGen -> UGen -> UGen
lag2 i t = mkFilter "Lag2" [i, t] 1
lag3 :: UGen -> UGen -> UGen
lag3 i t = mkFilter "Lag3" [i, t] 1
lastValue :: UGen -> UGen -> UGen
lastValue i t = mkFilter "LastValue" [i, t] 1
latch :: UGen -> UGen -> UGen
latch i t = mkFilter "Latch" [i, t] 1
leakDC :: UGen -> UGen -> UGen
leakDC i coef = mkFilter "LeakDC" [i, coef] 1
linLin :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen
linLin i sl sh dl dh = mkFilter "LinLin" [i, sl, sh, dl, dh] 1
linExp :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen
linExp i sl sh dl dh = mkFilter "LinExp" [i, sl, sh, dl, dh] 1
lpf :: UGen -> UGen -> UGen
lpf i f = mkFilter "LPF" [i, f] 1
lpz1 :: UGen -> UGen
lpz1 i = mkFilter "LPZ1" [i] 1
lpz2 :: UGen -> UGen
lpz2 i = mkFilter "LPZ2" [i] 1
mantissaMask :: UGen -> UGen -> UGen
mantissaMask i bits = mkFilter "MantissaMask" [i, bits] 1
median :: UGen -> UGen -> UGen
median size i = mkFilter "Median" [size, i] 1
moogFF :: UGen -> UGen -> UGen -> UGen -> UGen
moogFF i f g r = mkFilter "MoogFF" [i, f, g, r] 1
mostChange :: UGen -> UGen -> UGen
mostChange a b = mkFilter "MostChange" [a, b] 1
mulAdd :: UGen -> UGen -> UGen -> UGen
mulAdd s m a = mkFilter "MulAdd" [s, m, a] 1
normalizer :: UGen -> UGen -> UGen -> UGen
normalizer i level dur = mkFilter "Normalizer" [i, level, dur] 1
onePole :: UGen -> UGen -> UGen
onePole i coef = mkFilter "OnePole" [i, coef] 1
oneZero :: UGen -> UGen -> UGen
oneZero i coef = mkFilter "OneZero" [i, coef] 1
peak :: UGen -> UGen -> UGen
peak t r = mkFilter "Peak" [t, r] 1
pitchShift :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen
pitchShift i w p d t = mkFilter "PitchShift" [i, w, p, d, t] 1
pluck :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
pluck i tr mdl dl dc coef = mkFilter "Pluck" [i, tr, mdl, dl, dc, coef] 1
pulseCount :: UGen -> UGen -> UGen
pulseCount t r = mkFilter "PulseCount" [t, r] 1
pulseDivider :: UGen -> UGen -> UGen -> UGen
pulseDivider t factor start = mkFilter "PulseDivider" [t, factor, start] 1
ramp :: UGen -> UGen -> UGen
ramp i t = mkFilter "Ramp" [i, t] 1
rhpf :: UGen -> UGen -> UGen -> UGen
rhpf i freq rq = mkFilter "RHPF" [i, freq, rq] 1
rlpf :: UGen -> UGen -> UGen -> UGen
rlpf i freq rq = mkFilter "RLPF" [i, freq, rq] 1
resonz :: UGen -> UGen -> UGen -> UGen
resonz i freq bwr = mkFilter "Resonz" [i, freq, bwr] 1
ringz :: UGen -> UGen -> UGen -> UGen
ringz i freq dcy = mkFilter "Ringz" [i, freq, dcy] 1
runningMax :: UGen -> UGen -> UGen
runningMax i t = mkFilter "RunningMax" [i, t] 1
runningMin :: UGen -> UGen -> UGen
runningMin i t = mkFilter "RunningMin" [i, t] 1
runningSum :: UGen -> UGen -> UGen
runningSum i n = mkFilter "RunningSum" [i, n] 1
select :: UGen -> UGen -> UGen
select i a = mkFilterMCE "Select" [i] a 1
sendTrig :: UGen -> UGen -> UGen -> UGen
sendTrig i k v = mkFilter "SendTrig" [i, k, v] 0
setResetFF :: UGen -> UGen -> UGen
setResetFF t r = mkFilter "SetResetFF" [t, r] 1
shaper :: UGen -> UGen -> UGen
shaper b s = mkFilter "Shaper" [b, s] 1
slew :: UGen -> UGen -> UGen -> UGen
slew i up dn = mkFilter "Slew" [i, up, dn] 1
sos :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
sos i a0 a1 a2 b1 b2 = mkFilter "SOS" [i, a0, a1, a2, b1, b2] 1
stepper :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
stepper t r mn mx s v = mkFilter "Stepper" [t, r, mn, mx, s, v] 1
sweep :: UGen -> UGen -> UGen
sweep t r = mkFilter "Sweep" [t, r] 1
tDelay :: UGen -> UGen -> UGen
tDelay i d = mkFilter "TDelay" [i, d] 1
timer :: UGen -> UGen
timer t = mkFilter "Timer" [t] 1
toggleFF :: UGen -> UGen
toggleFF t = mkFilter "ToggleFF" [t] 1
trig :: UGen -> UGen -> UGen
trig i d = mkFilter "Trig" [i, d] 1
trig1 :: UGen -> UGen -> UGen
trig1 i d = mkFilter "Trig1" [i, d] 1
twoPole :: UGen -> UGen -> UGen -> UGen
twoPole i freq radius = mkFilter "TwoPole" [i, freq, radius] 1
twoZero :: UGen -> UGen -> UGen -> UGen
twoZero i freq radius = mkFilter "TwoZero" [i, freq, radius] 1
wrapIndex :: UGen -> UGen -> UGen
wrapIndex b i = mkFilter "WrapIndex" [b, i] 1
bLowPass :: UGen -> UGen -> UGen -> UGen
bLowPass i f rq = mkFilter "BLowPass" [i, f, rq] 1
bHiPass :: UGen -> UGen -> UGen -> UGen
bHiPass i f rq = mkFilter "BHiPass" [i, f, rq] 1
bAllPass :: UGen -> UGen -> UGen -> UGen
bAllPass i f rq = mkFilter "BAllPass" [i, f, rq] 1
bBandPass :: UGen -> UGen -> UGen -> UGen
bBandPass i f bw = mkFilter "BBandPass" [i, f, bw] 1
bBandStop :: UGen -> UGen -> UGen -> UGen
bBandStop i f bw = mkFilter "BBandStop" [i, f, bw] 1
bPeakEQ :: UGen -> UGen -> UGen -> UGen -> UGen
bPeakEQ i f rq db = mkFilter "BPeakEQ" [i, f, rq, db] 1
bLowShelf :: UGen -> UGen -> UGen -> UGen -> UGen
bLowShelf i f rs db = mkFilter "BLowShelf" [i, f, rs, db] 1
bHiShelf :: UGen -> UGen -> UGen -> UGen -> UGen
bHiShelf i f rs db = mkFilter "BHiShelf" [i, f, rs, db] 1
bLowPassCoef :: Floating a => a -> a -> a -> (a, a, a, a, a)
bLowPassCoef sr freq rq =
let w0 = pi * 2 * freq * (1 / sr)
cos_w0 = cos w0
i = 1 cos_w0
alpha = sin w0 * 0.5 * rq
b0rz = recip (1 + alpha)
a0 = i * 0.5 * b0rz
a1 = i * b0rz
b1 = cos_w0 * 2 * b0rz
b2 = (1 alpha) * negate b0rz
in (a0, a1, a0, b1, b2)