1ZLPF { 2 *ar { arg in, fc=440, damping=0.707, mul=1, add=0; 3 4 var b0, b1, b2, a0, a1, a2; 5 var c, cc, twodC; 6 var out; 7 8 out = in; 9 10 damping.asArray.do({ arg df; 11 12 c = (pi * fc/SampleRate.ir).tan.reciprocal; 13 cc = c.squared; 14 twodC = 2 * df * c; 15 16 b0 = (1 + twodC + cc).reciprocal; 17 b1 = 2 * b0; 18 b2 = b0; 19 20 a0 = 1; 21 a1 = 2 * b0 * (1 - cc); 22 a2 = b0 * (1 - twodC + cc); 23 24 out = SOS.ar( out, b0/a0, b1/a0, b2/a0, a1/a0.neg, a2/a0.neg, mul, add ) 25 }); 26 ^out 27 } 28} 29 30 31ZHPF { 32 *ar { arg in, fc=440, damping=0.707, mul=1, add=0; 33 34 var b0, b1, b2, a0, a1, a2; 35 var c, cc, twodC; 36 var out; 37 38 out = in; 39 40 damping.asArray.do({ arg df; 41 42 c = (pi * fc/SampleRate.ir).tan; 43 cc = c.squared; 44 twodC = 2 * df * c; 45 46 b0 = (1 + twodC + cc).reciprocal; 47 b1 = -2 * b0; 48 b2 = b0; 49 50 a0 = 1; 51 a1 = 2 * b0 * (cc - 1); 52 a2 = b0 * (1 - twodC + cc); 53 54 out = SOS.ar( out, b0/a0, b1/a0, b2/a0, a1/a0.neg, a2/a0.neg, mul, add ) 55 }); 56 ^out 57 } 58} 59 60 61BLPF { 62 *ar { arg in, order=4, freq=440, mul=1, add=0; 63 var df, out; 64 order = order.asInteger; 65 df = Dictionary[ 66 2->2.sqrt.reciprocal, 67 4->[0.924, 0.383], 68 6->[0.966, 0.707, 0.259], 69 8->[0.981, 0.831, 0.556, 0.195], 70 10->[0.988, 0.891, 0.707, 0.454, 0.156] 71 ].at(order); 72 df.isNil.if({^(this.asString+"invalid order:" +order).error}); 73 out = (df.asArray.at(0) > 0).if({ZLPF.ar( in, freq, df)},{in}); 74 ^out * mul + add 75 76 } 77} 78 79BHPF { 80 *ar { arg in, order=4, freq=440, mul=1, add=0; 81 var df, out; 82 order = order.asInteger; 83 df = Dictionary[ 84 2->2.sqrt.reciprocal, 85 4->[0.924, 0.383], 86 6->[0.966, 0.707, 0.259], 87 8->[0.981, 0.831, 0.556, 0.195], 88 10->[0.988, 0.891, 0.707, 0.454, 0.156] 89 ].at(order); 90 df.isNil.if({^(this.asString+"invalid order:" +order).error}); 91 out = (df.asArray.at(0) > 0).if({ZHPF.ar( in, freq, df)},{in}); 92 ^out * mul + add 93 94 } 95} 96 97 98LRLPF { 99 *ar { arg in, order=4, freq=440, mul=1, add=0; 100 var df, out; 101 out = in; 102 2.do({out = BLPF.ar( out, order/2, freq)}) 103 ^out * mul + add 104 } 105} 106 107 108LRHPF { 109 *ar { arg in, order=4, freq=440, mul=1, add=0; 110 var df, out; 111 out = in; 112 2.do({out = BHPF.ar( out, order/2, freq)}); 113 ^out * mul + add 114 115 } 116}