1/* 2 * This is simulation of Mesa Dual Rectifier preamplifier (red channel, more gain) 3 * 4 * This file is part of tamgamp.lv2 <https://github.com/sadko4u/tamgamp.lv2>. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 3 of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this program; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 19 */ 20declare id "mesa_dual_rect_red"; 21declare name "mesa_dual_rect_red"; 22declare samplerate "96000"; 23 24import("stdfaust.lib"); 25import("amp_sim.lib"); 26 27p1 = 28 fi.iir((b0/a0,b1/a0,b2/a0,b3/a0,b4/a0,b5/a0),(a1/a0,a2/a0,a3/a0,a4/a0,a5/a0)) : 29 s01_stage1clip 30 31 with { 32 LogPot(a, x) = ba.if(a, (exp(a * x) - 1) / (exp(a) - 1), x); 33 fs = float(ma.SR); 34 35 gain = ampctrl.gain : LogPot(3.0) : si.smooth(0.999); 36 37 b0 = gain*(pow(fs,2)*gain*(fs*(4.75388127927614e-17*fs + 3.51837488502921e-14) + 6.1051452984792e-12) + fs*(fs*(fs*(-4.75388127927614e-17*fs - 5.89531552466728e-14) - 2.36970197236252e-11) - 3.0525726492396e-9)); 38 b1 = gain*(pow(fs,2)*gain*(fs*(-1.42616438378284e-16*fs - 3.51837488502921e-14) + 6.1051452984792e-12) + fs*(fs*(fs*(1.42616438378284e-16*fs + 5.89531552466728e-14) - 2.36970197236252e-11) - 9.1577179477188e-9)); 39 b2 = gain*(pow(fs,2)*gain*(fs*(9.50776255855229e-17*fs - 7.03674977005842e-14) - 1.22102905969584e-11) + fs*(fs*(fs*(-9.50776255855229e-17*fs + 1.17906310493346e-13) + 4.73940394472505e-11) - 6.1051452984792e-9)); 40 b3 = gain*(pow(fs,2)*gain*(fs*(9.50776255855229e-17*fs + 7.03674977005842e-14) - 1.22102905969584e-11) + fs*(fs*(fs*(-9.50776255855229e-17*fs - 1.17906310493346e-13) + 4.73940394472505e-11) + 6.1051452984792e-9)); 41 b4 = gain*(pow(fs,2)*gain*(fs*(-1.42616438378284e-16*fs + 3.51837488502921e-14) + 6.1051452984792e-12) + fs*(fs*(fs*(1.42616438378284e-16*fs - 5.89531552466728e-14) - 2.36970197236252e-11) + 9.1577179477188e-9)); 42 b5 = gain*(pow(fs,2)*gain*(fs*(4.75388127927614e-17*fs - 3.51837488502921e-14) + 6.1051452984792e-12) + fs*(fs*(fs*(-4.75388127927614e-17*fs + 5.89531552466728e-14) - 2.36970197236252e-11) + 3.0525726492396e-9)); 43 44 a0 = fs*(fs*(fs*(2.77018846582032e-20*fs + 5.54084203078628e-16) + 5.01340790630281e-13) + 1.1960884329196e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(-1.99011961617702e-36*fs - 6.47844436758614e-19) - 5.88702348424581e-16) - 1.33698658429561e-13) + fs*(fs*(fs*(fs*(1.99011961617702e-36*fs + 6.20142552100412e-19) + 3.72391306054362e-16) + 3.48645631966802e-14) - 3.34246646073902e-12)) + 1.67123323036951e-9; 45 a1 = fs*(fs*(fs*(-8.31056539746097e-20*fs - 5.54084203078628e-16) + 5.01340790630281e-13) + 3.5882652987588e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(9.95059808088511e-36*fs + 1.94353331027584e-18) + 5.88702348424581e-16) - 1.33698658429561e-13) + fs*(fs*(fs*(fs*(-9.95059808088511e-36*fs - 1.86042765630124e-18) - 3.72391306054362e-16) + 3.48645631966802e-14) - 1.00273993822171e-11)) + 8.35616615184755e-9; 46 a2 = fs*(fs*(fs*(5.54037693164065e-20*fs - 1.10816840615726e-15) - 1.00268158126056e-12) + 2.3921768658392e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(-1.99011961617702e-35*fs - 1.29568887351723e-18) + 1.17740469684916e-15) + 2.67397316859122e-13) + fs*(fs*(fs*(fs*(1.99011961617702e-35*fs + 1.24028510420082e-18) - 7.44782612108724e-16) - 6.97291263933603e-14) - 6.68493292147804e-12)) + 1.67123323036951e-8; 47 a3 = fs*(fs*(fs*(5.54037693164065e-20*fs + 1.10816840615726e-15) - 1.00268158126056e-12) - 2.3921768658392e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(1.99011961617702e-35*fs - 1.29568887351723e-18) - 1.17740469684916e-15) + 2.67397316859122e-13) + fs*(fs*(fs*(fs*(-1.99011961617702e-35*fs + 1.24028510420082e-18) + 7.44782612108724e-16) - 6.97291263933603e-14) + 6.68493292147804e-12)) + 1.67123323036951e-8; 48 a4 = fs*(fs*(fs*(-8.31056539746097e-20*fs + 5.54084203078628e-16) + 5.01340790630281e-13) - 3.5882652987588e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(-9.95059808088511e-36*fs + 1.94353331027584e-18) - 5.88702348424581e-16) - 1.33698658429561e-13) + fs*(fs*(fs*(fs*(9.95059808088511e-36*fs - 1.86042765630124e-18) + 3.72391306054362e-16) + 3.48645631966802e-14) + 1.00273993822171e-11)) + 8.35616615184755e-9; 49 a5 = fs*(fs*(fs*(2.77018846582032e-20*fs - 5.54084203078628e-16) + 5.01340790630281e-13) - 1.1960884329196e-10) + gain*(pow(fs,2)*gain*(fs*(fs*(1.99011961617702e-36*fs - 6.47844436758614e-19) + 5.88702348424581e-16) - 1.33698658429561e-13) + fs*(fs*(fs*(fs*(-1.99011961617702e-36*fs + 6.20142552100412e-19) - 3.72391306054362e-16) + 3.48645631966802e-14) + 3.34246646073902e-12)) + 1.67123323036951e-9; 50 }; 51 52s01_stage1clip = 53 _<: 54 ba.if(signbit(_), s01_stage1_neg_clip, s01_stage1_clip) 55 :>_ 56 57 with { 58 signbit = ffunction(int signbit(float), "math.h", ""); 59 s01_stage1_clip = ffunction(float s01_stage1clip(float), "generated/stage/mesa_dual_rect_red/s01_stage1_table.h", ""); 60 s01_stage1_neg_clip = ffunction(float s01_stage1_negclip(float), "generated/stage/mesa_dual_rect_red/s01_stage1_neg_table.h", ""); 61 }; 62 63p2 = 64 fi.iir((b0/a0,b1/a0,b2/a0),(a1/a0,a2/a0)) : 65 s02_stage2clip 66 67 with { 68 fs = float(ma.SR); 69 70 b0 = -0.000655304158661071*fs - 0.18202893296141; 71 b1 = -0.364057865922819; 72 b2 = 0.000655304158661071*fs - 0.18202893296141; 73 74 a0 = fs*(2.03405658623965e-10*fs + 1.09382323078101e-5) + 0.0063182117555006; 75 a1 = -4.0681131724793e-10*pow(fs,2) + 0.0126364235110012; 76 a2 = fs*(2.03405658623965e-10*fs - 1.09382323078101e-5) + 0.0063182117555006; 77 }; 78 79s02_stage2clip = 80 _<: 81 ba.if(signbit(_), s02_stage2_neg_clip, s02_stage2_clip) 82 :>_ 83 84 with { 85 signbit = ffunction(int signbit(float), "math.h", ""); 86 s02_stage2_clip = ffunction(float s02_stage2clip(float), "generated/stage/mesa_dual_rect_red/s02_stage2_table.h", ""); 87 s02_stage2_neg_clip = ffunction(float s02_stage2_negclip(float), "generated/stage/mesa_dual_rect_red/s02_stage2_neg_table.h", ""); 88 }; 89 90 91p3 = 92 fi.iir((b0/a0,b1/a0),(a1/a0)) : 93 s03_stage3clip 94 95 with { 96 fs = float(ma.SR); 97 98 b0 = -0.146261721859089; 99 b1 = -0.146261721859089; 100 101 a0 = 1.88103770813187e-5*fs + 0.0971019000967005; 102 a1 = -1.88103770813187e-5*fs + 0.0971019000967005; 103 }; 104 105s03_stage3clip = 106 _<: 107 ba.if(signbit(_), s03_stage3_neg_clip, s03_stage3_clip) 108 :>_ 109 110 with { 111 signbit = ffunction(int signbit(float), "math.h", ""); 112 s03_stage3_clip = ffunction(float s03_stage3clip(float), "generated/stage/mesa_dual_rect_red/s03_stage3_table.h", ""); 113 s03_stage3_neg_clip = ffunction(float s03_stage3_negclip(float), "generated/stage/mesa_dual_rect_red/s03_stage3_neg_table.h", ""); 114 }; 115 116p4 = 117 fi.iir((b0/a0,b1/a0),(a1/a0)) : 118 s04_stage4clip 119 120 with { 121 fs = float(ma.SR); 122 123 b0 = -0.00149525527902205*fs - 0.415348688617234; 124 b1 = 0.00149525527902205*fs - 0.415348688617234; 125 126 a0 = 2.06413022257424e-5*fs + 0.00921749316436716; 127 a1 = -2.06413022257424e-5*fs + 0.00921749316436716; 128 }; 129 130s04_stage4clip = 131 _<: 132 ba.if(signbit(_), s04_stage4_neg_clip, s04_stage4_clip) 133 :>_ 134 135 with { 136 signbit = ffunction(int signbit(float), "math.h", ""); 137 s04_stage4_clip = ffunction(float s04_stage4clip(float), "generated/stage/mesa_dual_rect_red/s04_stage4_table.h", ""); 138 s04_stage4_neg_clip = ffunction(float s04_stage4_negclip(float), "generated/stage/mesa_dual_rect_red/s04_stage4_neg_table.h", ""); 139 }; 140 141p5 = 142 fi.iir((b0/a0,b1/a0,b2/a0,b3/a0,b4/a0),(a1/a0,a2/a0,a3/a0,a4/a0)) 143 144 with { 145 fs = float(ma.SR); 146 147 bass = ampctrl.bass : si.smooth(0.999); 148 middle = ampctrl.middle : si.smooth(0.999); 149 treble = ampctrl.treble : si.smooth(0.999); 150 master = ampctrl.master : si.smooth(0.999); 151 presence = 0.8; 152 153 b0 = bass*(pow(fs,2)*master*middle*(fs*(3.30051659809705e-20*fs + 3.34529484863571e-16) + 6.40078398818915e-13) + fs*master*(fs*(3.82282057153329e-17*fs + 3.74097967699649e-13) + 6.40078398818915e-10)) + fs*master*(fs*(9.55705142883322e-19*fs + 9.35244919249122e-15) + 1.60019599704729e-11) + middle*(pow(fs,2)*master*middle*(fs*(-8.25129149524264e-22*fs - 8.36323712158926e-18) - 1.60019599704729e-14) + fs*master*(fs*(fs*(8.25129149524264e-22*fs + 9.05779027775447e-18) + 2.33065297055437e-14) + 1.54757833370144e-11)) + presence*(bass*(pow(fs,3)*master*middle*(3.75058704329211e-20*fs + 9.60117598228372e-17) + pow(fs,2)*master*(4.34411428583328e-17*fs + 9.60117598228372e-14)) + pow(fs,2)*master*(1.08602857145832e-18*fs + 2.40029399557093e-15) + middle*(pow(fs,3)*master*middle*(-9.37646760823027e-22*fs - 2.40029399557093e-18) + pow(fs,2)*master*(fs*(9.37646760823027e-22*fs + 3.18955894575866e-18) + 2.32136750055216e-15)) + treble*(5.93527242541174e-20*bass*pow(fs,4)*master - 1.48381810635294e-21*pow(fs,4)*master*middle + pow(fs,2)*master*(fs*(1.48381810635294e-21*fs + 2.96763621270587e-18) + 7.89264950187733e-16))) + treble*(bass*pow(fs,3)*master*(5.22303973436233e-20*fs + 3.95684828360783e-16) + pow(fs,3)*master*middle*(-1.30575993359058e-21*fs - 9.89212070901957e-18) + fs*master*(fs*(fs*(1.30575993359058e-21*fs + 1.25036405762007e-17) + 2.04787945742043e-14) + 5.26176633458489e-12)); 154 b1 = bass*(pow(fs,3)*master*middle*(-1.32020663923882e-19*fs - 6.69058969727141e-16) + fs*master*(-7.64564114306658e-17*pow(fs,2) + 1.28015679763783e-9)) + fs*master*(-1.91141028576664e-18*pow(fs,2) + 3.20039199409457e-11) + middle*(pow(fs,3)*master*middle*(3.30051659809705e-21*fs + 1.67264742431785e-17) + fs*master*(pow(fs,2)*(-3.30051659809705e-21*fs - 1.81155805555089e-17) + 3.09515666740288e-11)) + presence*(bass*(pow(fs,3)*master*middle*(-1.50023481731684e-19*fs - 1.92023519645674e-16) - 8.68822857166656e-17*pow(fs,3)*master) - 2.17205714291664e-18*pow(fs,3)*master + middle*(pow(fs,3)*master*middle*(3.75058704329211e-21*fs + 4.80058799114186e-18) + pow(fs,3)*master*(-3.75058704329211e-21*fs - 6.37911789151733e-18)) + treble*(-2.3741089701647e-19*bass*pow(fs,4)*master + 5.93527242541174e-21*pow(fs,4)*master*middle + pow(fs,3)*master*(-5.93527242541174e-21*fs - 5.93527242541174e-18))) + treble*(bass*pow(fs,3)*master*(-2.08921589374493e-19*fs - 7.91369656721565e-16) + pow(fs,3)*master*middle*(5.22303973436233e-21*fs + 1.97842414180391e-17) + fs*master*(pow(fs,2)*(-5.22303973436233e-21*fs - 2.50072811524015e-17) + 1.05235326691698e-11)); 155 b2 = bass*(pow(fs,2)*master*middle*(1.98030995885823e-19*pow(fs,2) - 1.28015679763783e-12) - 7.48195935399298e-13*pow(fs,2)*master) - 1.87048983849824e-14*pow(fs,2)*master + middle*(pow(fs,2)*master*middle*(-4.95077489714558e-21*pow(fs,2) + 3.20039199409457e-14) + pow(fs,2)*master*(4.95077489714558e-21*pow(fs,2) - 4.66130594110873e-14)) + presence*(bass*(2.25035222597526e-19*pow(fs,4)*master*middle - 1.92023519645674e-13*pow(fs,2)*master) - 4.80058799114186e-15*pow(fs,2)*master + middle*(-5.62588056493816e-21*pow(fs,4)*master*middle + pow(fs,2)*master*(5.62588056493816e-21*pow(fs,2) - 4.64273500110431e-15)) + treble*(3.56116345524704e-19*bass*pow(fs,4)*master - 8.90290863811761e-21*pow(fs,4)*master*middle + pow(fs,2)*master*(8.90290863811761e-21*pow(fs,2) - 1.57852990037547e-15))) + treble*(3.1338238406174e-19*bass*pow(fs,4)*master - 7.8345596015435e-21*pow(fs,4)*master*middle + pow(fs,2)*master*(7.8345596015435e-21*pow(fs,2) - 4.09575891484087e-14)); 156 b3 = bass*(pow(fs,3)*master*middle*(-1.32020663923882e-19*fs + 6.69058969727141e-16) + fs*master*(7.64564114306658e-17*pow(fs,2) - 1.28015679763783e-9)) + fs*master*(1.91141028576664e-18*pow(fs,2) - 3.20039199409457e-11) + middle*(pow(fs,3)*master*middle*(3.30051659809705e-21*fs - 1.67264742431785e-17) + fs*master*(pow(fs,2)*(-3.30051659809705e-21*fs + 1.81155805555089e-17) - 3.09515666740288e-11)) + presence*(bass*(pow(fs,3)*master*middle*(-1.50023481731684e-19*fs + 1.92023519645674e-16) + 8.68822857166656e-17*pow(fs,3)*master) + 2.17205714291664e-18*pow(fs,3)*master + middle*(pow(fs,3)*master*middle*(3.75058704329211e-21*fs - 4.80058799114186e-18) + pow(fs,3)*master*(-3.75058704329211e-21*fs + 6.37911789151733e-18)) + treble*(-2.3741089701647e-19*bass*pow(fs,4)*master + 5.93527242541174e-21*pow(fs,4)*master*middle + pow(fs,3)*master*(-5.93527242541174e-21*fs + 5.93527242541174e-18))) + treble*(bass*pow(fs,3)*master*(-2.08921589374493e-19*fs + 7.91369656721565e-16) + pow(fs,3)*master*middle*(5.22303973436233e-21*fs - 1.97842414180391e-17) + fs*master*(pow(fs,2)*(-5.22303973436233e-21*fs + 2.50072811524015e-17) - 1.05235326691698e-11)); 157 b4 = bass*(pow(fs,2)*master*middle*(fs*(3.30051659809705e-20*fs - 3.34529484863571e-16) + 6.40078398818915e-13) + fs*master*(fs*(-3.82282057153329e-17*fs + 3.74097967699649e-13) - 6.40078398818915e-10)) + fs*master*(fs*(-9.55705142883322e-19*fs + 9.35244919249122e-15) - 1.60019599704729e-11) + middle*(pow(fs,2)*master*middle*(fs*(-8.25129149524264e-22*fs + 8.36323712158926e-18) - 1.60019599704729e-14) + fs*master*(fs*(fs*(8.25129149524264e-22*fs - 9.05779027775447e-18) + 2.33065297055437e-14) - 1.54757833370144e-11)) + presence*(bass*(pow(fs,3)*master*middle*(3.75058704329211e-20*fs - 9.60117598228372e-17) + pow(fs,2)*master*(-4.34411428583328e-17*fs + 9.60117598228372e-14)) + pow(fs,2)*master*(-1.08602857145832e-18*fs + 2.40029399557093e-15) + middle*(pow(fs,3)*master*middle*(-9.37646760823027e-22*fs + 2.40029399557093e-18) + pow(fs,2)*master*(fs*(9.37646760823027e-22*fs - 3.18955894575866e-18) + 2.32136750055216e-15)) + treble*(5.93527242541174e-20*bass*pow(fs,4)*master - 1.48381810635294e-21*pow(fs,4)*master*middle + pow(fs,2)*master*(fs*(1.48381810635294e-21*fs - 2.96763621270587e-18) + 7.89264950187733e-16))) + treble*(bass*pow(fs,3)*master*(5.22303973436233e-20*fs - 3.95684828360783e-16) + pow(fs,3)*master*middle*(-1.30575993359058e-21*fs + 9.89212070901957e-18) + fs*master*(fs*(fs*(1.30575993359058e-21*fs - 1.25036405762007e-17) + 2.04787945742043e-14) - 5.26176633458489e-12)); 158 159 a0 = bass*(fs*middle*(fs*(fs*(9.36636501686785e-20*fs + 5.550940631707e-16) + 7.69332141249659e-13) + 1.54757833370144e-11) + fs*(fs*(fs*(5.22303973436233e-20*fs + 7.08848818168071e-16) + 1.94674088009371e-12) + 7.98426613923246e-10) + 1.54757833370144e-8) + fs*(fs*(fs*(1.30575993359058e-21*fs + 2.03327403213829e-17) + 7.68282573623741e-14) + 8.54541804303259e-11) + middle*(fs*middle*(fs*(fs*(-2.34159125421696e-21*fs - 1.38773515792675e-17) - 1.92333035312415e-14) - 3.86894583425359e-13) + fs*(fs*(fs*(1.03583132062638e-21*fs + 8.39313633499656e-19) - 2.55659940727471e-15) + 1.58626779204397e-11)) + presence*(bass*(pow(fs,2)*middle*(fs*(3.8989688539274e-20*fs + 1.01165195674063e-16) + 2.32136750055216e-15) + fs*(fs*(fs*(5.93527242541174e-20*fs + 2.2097561511256e-16) + 1.05529366575101e-13) + 2.32136750055216e-12)) + fs*(fs*(fs*(1.48381810635294e-21*fs + 8.49202659051988e-18) + 1.21558409166413e-14) + 2.37940168806596e-12) + middle*(pow(fs,2)*middle*(fs*(-9.7474221348185e-22*fs - 2.52912989185157e-18) - 5.80341875138039e-17) + pow(fs,2)*(fs*(-5.09075892871085e-22*fs - 1.04577605899874e-18) + 2.37940168806596e-15)) + treble*(bass*(pow(fs,3)*middle*(6.4088313955244e-21*fs + 2.24244100553338e-17) + pow(fs,2)*(fs*(1.48381810635294e-20*fs + 4.85667222995519e-17) + 2.24244100553338e-14)) + fs*(fs*(fs*(3.70954526588234e-22*fs + 1.95607711066527e-18) + 2.9400119394493e-15) + 5.80341875138039e-13) + middle*(pow(fs,3)*middle*(-1.6022078488811e-22*fs - 5.60610251383346e-19) + pow(fs,2)*(fs*(-2.10733741700124e-22*fs - 3.33116236329232e-19) + 5.80341875138039e-16)) + treble*(bass*(-7.89264950187733e-21*pow(fs,4)*middle + pow(fs,3)*(-1.48381810635294e-20*fs - 7.89264950187733e-18)) + pow(fs,2)*(fs*(-3.70954526588234e-22*fs - 9.39225290723401e-19) - 1.97316237546933e-16) + middle*(1.97316237546933e-22*pow(fs,4)*middle + pow(fs,3)*(1.736382890413e-22*fs - 1.97316237546933e-19))))) + treble*(bass*(pow(fs,2)*middle*(fs*(2.61993027449037e-19*fs + 9.59435425698876e-16) + 1.49496067035559e-13) + fs*(fs*(fs*(6.0658484187708e-19*fs + 2.08432881469588e-15) + 1.24048803172573e-12) + 1.49496067035559e-10)) + fs*(fs*(fs*(1.5164621046927e-20*fs + 8.24374624612509e-17) + 1.33228202155789e-13) + 4.33244554519717e-11) + middle*(pow(fs,2)*middle*(fs*(-6.54982568622593e-21*fs - 2.39858856424719e-17) - 3.73740167588897e-15) + fs*(fs*(fs*(-8.61479536070106e-21*fs - 1.50226833524732e-17) + 2.15036009467815e-14) + 3.86894583425359e-12)) + treble*(bass*(pow(fs,3)*middle*(-3.22651511636745e-19*fs - 5.26176633458489e-17) + pow(fs,2)*(fs*(-6.0658484187708e-19*fs - 4.21572718726941e-16) - 5.26176633458489e-14)) + fs*(fs*(fs*(-1.5164621046927e-20*fs - 4.08685600620275e-17) - 1.43277897290746e-14) - 1.31544158364622e-12) + middle*(pow(fs,3)*middle*(8.06628779091864e-21*fs + 1.31544158364622e-18) + pow(fs,2)*(fs*(7.09833325600836e-21*fs - 6.90869919730996e-18) - 1.31544158364622e-15))) + 3.86894583425359e-9) + 1.58626779204397e-8; 160 a1 = bass*(fs*middle*(pow(fs,2)*(-3.74654600674714e-19*fs - 1.1101881263414e-15) + 3.09515666740288e-11) + fs*(pow(fs,2)*(-2.08921589374493e-19*fs - 1.41769763633614e-15) + 1.59685322784649e-9) + 6.19031333480575e-8) + fs*(pow(fs,2)*(-5.22303973436233e-21*fs - 4.06654806427659e-17) + 1.70908360860652e-10) + middle*(fs*middle*(pow(fs,2)*(9.36636501686785e-21*fs + 2.7754703158535e-17) - 7.73789166850719e-13) + fs*(pow(fs,2)*(-4.14332528250552e-21*fs - 1.67862726699931e-18) + 3.17253558408795e-11)) + presence*(bass*(pow(fs,3)*middle*(-1.55958754157096e-19*fs - 2.02330391348126e-16) + fs*(pow(fs,2)*(-2.3741089701647e-19*fs - 4.41951230225121e-16) + 4.64273500110431e-12)) + fs*(pow(fs,2)*(-5.93527242541174e-21*fs - 1.69840531810398e-17) + 4.75880337613192e-12) + middle*(pow(fs,3)*middle*(3.8989688539274e-21*fs + 5.05825978370315e-18) + pow(fs,3)*(2.03630357148434e-21*fs + 2.09155211799747e-18)) + treble*(bass*(pow(fs,3)*middle*(-2.56353255820976e-20*fs - 4.48488201106677e-17) + pow(fs,3)*(-5.93527242541174e-20*fs - 9.71334445991038e-17)) + fs*(pow(fs,2)*(-1.48381810635294e-21*fs - 3.91215422133053e-18) + 1.16068375027608e-12) + middle*(pow(fs,3)*middle*(6.4088313955244e-22*fs + 1.12122050276669e-18) + pow(fs,3)*(8.42934966800495e-22*fs + 6.66232472658464e-19)) + treble*(bass*(3.15705980075093e-20*pow(fs,4)*middle + pow(fs,3)*(5.93527242541174e-20*fs + 1.57852990037547e-17)) + pow(fs,3)*(1.48381810635294e-21*fs + 1.8784505814468e-18) + middle*(-7.89264950187733e-22*pow(fs,4)*middle + pow(fs,3)*(-6.94553156165202e-22*fs + 3.94632475093867e-19))))) + treble*(bass*(pow(fs,3)*middle*(-1.04797210979615e-18*fs - 1.91887085139775e-15) + fs*(pow(fs,2)*(-2.42633936750832e-18*fs - 4.16865762939176e-15) + 2.98992134071118e-10)) + fs*(pow(fs,2)*(-6.0658484187708e-20*fs - 1.64874924922502e-16) + 8.66489109039434e-11) + middle*(pow(fs,3)*middle*(2.61993027449037e-20*fs + 4.79717712849438e-17) + fs*(pow(fs,2)*(3.44591814428042e-20*fs + 3.00453667049463e-17) + 7.73789166850719e-12)) + treble*(bass*(pow(fs,3)*middle*(1.29060604654698e-18*fs + 1.05235326691698e-16) + pow(fs,3)*(2.42633936750832e-18*fs + 8.43145437453882e-16)) + fs*(pow(fs,2)*(6.0658484187708e-20*fs + 8.1737120124055e-17) - 2.63088316729244e-12) + middle*(pow(fs,3)*middle*(-3.22651511636745e-20*fs - 2.63088316729244e-18) + pow(fs,3)*(-2.83933330240335e-20*fs + 1.38173983946199e-17))) + 1.54757833370144e-8) + 6.3450711681759e-8; 161 a2 = bass*(pow(fs,2)*middle*(5.61981901012071e-19*pow(fs,2) - 1.53866428249932e-12) + pow(fs,2)*(3.1338238406174e-19*pow(fs,2) - 3.89348176018742e-12) + 9.28547000220863e-8) + pow(fs,2)*(7.8345596015435e-21*pow(fs,2) - 1.53656514724748e-13) + middle*(pow(fs,2)*middle*(-1.40495475253018e-20*pow(fs,2) + 3.84666070624829e-14) + pow(fs,2)*(6.21498792375828e-21*pow(fs,2) + 5.11319881454942e-15)) + presence*(bass*(pow(fs,2)*middle*(2.33938131235644e-19*pow(fs,2) - 4.64273500110431e-15) + pow(fs,2)*(3.56116345524704e-19*pow(fs,2) - 2.11058733150202e-13)) + pow(fs,2)*(8.90290863811761e-21*pow(fs,2) - 2.43116818332827e-14) + middle*(pow(fs,2)*middle*(-5.8484532808911e-21*pow(fs,2) + 1.16068375027608e-16) + pow(fs,2)*(-3.05445535722651e-21*pow(fs,2) - 4.75880337613192e-15)) + treble*(bass*(3.84529883731464e-20*pow(fs,4)*middle + pow(fs,2)*(8.90290863811761e-20*pow(fs,2) - 4.48488201106677e-14)) + pow(fs,2)*(2.2257271595294e-21*pow(fs,2) - 5.8800238788986e-15) + middle*(-9.6132470932866e-22*pow(fs,4)*middle + pow(fs,2)*(-1.26440245020074e-21*pow(fs,2) - 1.16068375027608e-15)) + treble*(bass*(-4.7355897011264e-20*pow(fs,4)*middle - 8.90290863811761e-20*pow(fs,4)) + pow(fs,2)*(-2.2257271595294e-21*pow(fs,2) + 3.94632475093867e-16) + middle*(1.1838974252816e-21*pow(fs,4)*middle + 1.0418297342478e-21*pow(fs,4))))) + treble*(bass*(pow(fs,2)*middle*(1.57195816469422e-18*pow(fs,2) - 2.98992134071118e-13) + pow(fs,2)*(3.63950905126248e-18*pow(fs,2) - 2.48097606345145e-12)) + pow(fs,2)*(9.0987726281562e-20*pow(fs,2) - 2.66456404311578e-13) + middle*(pow(fs,2)*middle*(-3.92989541173556e-20*pow(fs,2) + 7.47480335177794e-15) + pow(fs,2)*(-5.16887721642064e-20*pow(fs,2) - 4.3007201893563e-14)) + treble*(bass*(-1.93590906982047e-18*pow(fs,4)*middle + pow(fs,2)*(-3.63950905126248e-18*pow(fs,2) + 1.05235326691698e-13)) + pow(fs,2)*(-9.0987726281562e-20*pow(fs,2) + 2.86555794581493e-14) + middle*(4.83977267455118e-20*pow(fs,4)*middle + pow(fs,2)*(4.25899995360502e-20*pow(fs,2) + 2.63088316729244e-15))) + 2.32136750055216e-8) + 9.51760675226384e-8; 162 a3 = bass*(fs*middle*(pow(fs,2)*(-3.74654600674714e-19*fs + 1.1101881263414e-15) - 3.09515666740288e-11) + fs*(pow(fs,2)*(-2.08921589374493e-19*fs + 1.41769763633614e-15) - 1.59685322784649e-9) + 6.19031333480575e-8) + fs*(pow(fs,2)*(-5.22303973436233e-21*fs + 4.06654806427659e-17) - 1.70908360860652e-10) + middle*(fs*middle*(pow(fs,2)*(9.36636501686785e-21*fs - 2.7754703158535e-17) + 7.73789166850719e-13) + fs*(pow(fs,2)*(-4.14332528250552e-21*fs + 1.67862726699931e-18) - 3.17253558408795e-11)) + presence*(bass*(pow(fs,3)*middle*(-1.55958754157096e-19*fs + 2.02330391348126e-16) + fs*(pow(fs,2)*(-2.3741089701647e-19*fs + 4.41951230225121e-16) - 4.64273500110431e-12)) + fs*(pow(fs,2)*(-5.93527242541174e-21*fs + 1.69840531810398e-17) - 4.75880337613192e-12) + middle*(pow(fs,3)*middle*(3.8989688539274e-21*fs - 5.05825978370315e-18) + pow(fs,3)*(2.03630357148434e-21*fs - 2.09155211799747e-18)) + treble*(bass*(pow(fs,3)*middle*(-2.56353255820976e-20*fs + 4.48488201106677e-17) + pow(fs,3)*(-5.93527242541174e-20*fs + 9.71334445991038e-17)) + fs*(pow(fs,2)*(-1.48381810635294e-21*fs + 3.91215422133053e-18) - 1.16068375027608e-12) + middle*(pow(fs,3)*middle*(6.4088313955244e-22*fs - 1.12122050276669e-18) + pow(fs,3)*(8.42934966800495e-22*fs - 6.66232472658464e-19)) + treble*(bass*(3.15705980075093e-20*pow(fs,4)*middle + pow(fs,3)*(5.93527242541174e-20*fs - 1.57852990037547e-17)) + pow(fs,3)*(1.48381810635294e-21*fs - 1.8784505814468e-18) + middle*(-7.89264950187733e-22*pow(fs,4)*middle + pow(fs,3)*(-6.94553156165202e-22*fs - 3.94632475093867e-19))))) + treble*(bass*(pow(fs,3)*middle*(-1.04797210979615e-18*fs + 1.91887085139775e-15) + fs*(pow(fs,2)*(-2.42633936750832e-18*fs + 4.16865762939176e-15) - 2.98992134071118e-10)) + fs*(pow(fs,2)*(-6.0658484187708e-20*fs + 1.64874924922502e-16) - 8.66489109039434e-11) + middle*(pow(fs,3)*middle*(2.61993027449037e-20*fs - 4.79717712849438e-17) + fs*(pow(fs,2)*(3.44591814428042e-20*fs - 3.00453667049463e-17) - 7.73789166850719e-12)) + treble*(bass*(pow(fs,3)*middle*(1.29060604654698e-18*fs - 1.05235326691698e-16) + pow(fs,3)*(2.42633936750832e-18*fs - 8.43145437453882e-16)) + fs*(pow(fs,2)*(6.0658484187708e-20*fs - 8.1737120124055e-17) + 2.63088316729244e-12) + middle*(pow(fs,3)*middle*(-3.22651511636745e-20*fs + 2.63088316729244e-18) + pow(fs,3)*(-2.83933330240335e-20*fs - 1.38173983946199e-17))) + 1.54757833370144e-8) + 6.3450711681759e-8; 163 a4 = bass*(fs*middle*(fs*(fs*(9.36636501686785e-20*fs - 5.550940631707e-16) + 7.69332141249659e-13) - 1.54757833370144e-11) + fs*(fs*(fs*(5.22303973436233e-20*fs - 7.08848818168071e-16) + 1.94674088009371e-12) - 7.98426613923246e-10) + 1.54757833370144e-8) + fs*(fs*(fs*(1.30575993359058e-21*fs - 2.03327403213829e-17) + 7.68282573623741e-14) - 8.54541804303259e-11) + middle*(fs*middle*(fs*(fs*(-2.34159125421696e-21*fs + 1.38773515792675e-17) - 1.92333035312415e-14) + 3.86894583425359e-13) + fs*(fs*(fs*(1.03583132062638e-21*fs - 8.39313633499656e-19) - 2.55659940727471e-15) - 1.58626779204397e-11)) + presence*(bass*(pow(fs,2)*middle*(fs*(3.8989688539274e-20*fs - 1.01165195674063e-16) + 2.32136750055216e-15) + fs*(fs*(fs*(5.93527242541174e-20*fs - 2.2097561511256e-16) + 1.05529366575101e-13) - 2.32136750055216e-12)) + fs*(fs*(fs*(1.48381810635294e-21*fs - 8.49202659051988e-18) + 1.21558409166413e-14) - 2.37940168806596e-12) + middle*(pow(fs,2)*middle*(fs*(-9.7474221348185e-22*fs + 2.52912989185157e-18) - 5.80341875138039e-17) + pow(fs,2)*(fs*(-5.09075892871085e-22*fs + 1.04577605899874e-18) + 2.37940168806596e-15)) + treble*(bass*(pow(fs,3)*middle*(6.4088313955244e-21*fs - 2.24244100553338e-17) + pow(fs,2)*(fs*(1.48381810635294e-20*fs - 4.85667222995519e-17) + 2.24244100553338e-14)) + fs*(fs*(fs*(3.70954526588234e-22*fs - 1.95607711066527e-18) + 2.9400119394493e-15) - 5.80341875138039e-13) + middle*(pow(fs,3)*middle*(-1.6022078488811e-22*fs + 5.60610251383346e-19) + pow(fs,2)*(fs*(-2.10733741700124e-22*fs + 3.33116236329232e-19) + 5.80341875138039e-16)) + treble*(bass*(-7.89264950187733e-21*pow(fs,4)*middle + pow(fs,3)*(-1.48381810635294e-20*fs + 7.89264950187733e-18)) + pow(fs,2)*(fs*(-3.70954526588234e-22*fs + 9.39225290723401e-19) - 1.97316237546933e-16) + middle*(1.97316237546933e-22*pow(fs,4)*middle + pow(fs,3)*(1.736382890413e-22*fs + 1.97316237546933e-19))))) + treble*(bass*(pow(fs,2)*middle*(fs*(2.61993027449037e-19*fs - 9.59435425698876e-16) + 1.49496067035559e-13) + fs*(fs*(fs*(6.0658484187708e-19*fs - 2.08432881469588e-15) + 1.24048803172573e-12) - 1.49496067035559e-10)) + fs*(fs*(fs*(1.5164621046927e-20*fs - 8.24374624612509e-17) + 1.33228202155789e-13) - 4.33244554519717e-11) + middle*(pow(fs,2)*middle*(fs*(-6.54982568622593e-21*fs + 2.39858856424719e-17) - 3.73740167588897e-15) + fs*(fs*(fs*(-8.61479536070106e-21*fs + 1.50226833524732e-17) + 2.15036009467815e-14) - 3.86894583425359e-12)) + treble*(bass*(pow(fs,3)*middle*(-3.22651511636745e-19*fs + 5.26176633458489e-17) + pow(fs,2)*(fs*(-6.0658484187708e-19*fs + 4.21572718726941e-16) - 5.26176633458489e-14)) + fs*(fs*(fs*(-1.5164621046927e-20*fs + 4.08685600620275e-17) - 1.43277897290746e-14) + 1.31544158364622e-12) + middle*(pow(fs,3)*middle*(8.06628779091864e-21*fs - 1.31544158364622e-18) + pow(fs,2)*(fs*(7.09833325600836e-21*fs + 6.90869919730996e-18) - 1.31544158364622e-15))) + 3.86894583425359e-9) + 1.58626779204397e-8; 164 }; 165 166p6 = 167 fi.iir((b0/a0,b1/a0,b2/a0),(a1/a0,a2/a0)) : 168 s06_stage5clip 169 170 with { 171 fs = float(ma.SR); 172 173 b0 = 2.82461475968336e-10*pow(fs,2); 174 b1 = -5.64922951936672e-10*pow(fs,2); 175 b2 = 2.82461475968336e-10*pow(fs,2); 176 177 a0 = fs*(4.33570405894608e-10*fs + 2.19519582346283e-8) + 9.08235621017275e-8; 178 a1 = -8.67140811789215e-10*pow(fs,2) + 1.81647124203455e-7; 179 a2 = fs*(4.33570405894608e-10*fs - 2.19519582346283e-8) + 9.08235621017275e-8; 180 }; 181 182s06_stage5clip = 183 _<: 184 ba.if(signbit(_), s06_stage5_neg_clip, s06_stage5_clip) 185 :>_ 186 187 with { 188 signbit = ffunction(int signbit(float), "math.h", ""); 189 s06_stage5_clip = ffunction(float s06_stage5clip(float), "generated/stage/mesa_dual_rect_red/s06_stage5_table.h", ""); 190 s06_stage5_neg_clip = ffunction(float s06_stage5_negclip(float), "generated/stage/mesa_dual_rect_red/s06_stage5_neg_table.h", ""); 191 }; 192 193p7 = 194 fi.iir((b0/a0,b1/a0),(a1/a0)) : 195 s07_stage6clip 196 197 with { 198 fs = float(ma.SR); 199 200 b0 = -0.00119749787393626*fs - 0.123708458051269; 201 b1 = 0.00119749787393626*fs - 0.123708458051269; 202 203 a0 = 2.07375662139675e-5*fs + 0.00459682172955979; 204 a1 = -2.07375662139675e-5*fs + 0.00459682172955979; 205 }; 206 207s07_stage6clip = 208 _<: 209 ba.if(signbit(_), s07_stage6_neg_clip, s07_stage6_clip) 210 :>_ 211 212 with { 213 signbit = ffunction(int signbit(float), "math.h", ""); 214 s07_stage6_clip = ffunction(float s07_stage6clip(float), "generated/stage/mesa_dual_rect_red/s07_stage6_table.h", ""); 215 s07_stage6_neg_clip = ffunction(float s07_stage6_negclip(float), "generated/stage/mesa_dual_rect_red/s07_stage6_neg_table.h", ""); 216 }; 217 218 219process = 220 *(pregain) : 221 *(0.02) : 222 p1 : 223 *(0.7) : 224 p2 : 225 *(1.05) : 226 p3 : 227 *(3.2) : 228 p4 : 229 p5 : 230 *(20.0) : 231 p6 : 232 *(8.0) : 233 p7 : 234 *(0.02) : 235 *(postgain) 236 237 with { 238 pregain = ampctrl.pregain; 239 postgain = ampctrl.postgain; 240 tune1 = ampctrl.tune1; 241 tune2 = ampctrl.tune2; 242 tune3 = ampctrl.tune3; 243 tune4 = ampctrl.tune4; 244 tune5 = ampctrl.tune5; 245 tune6 = ampctrl.tune6; 246 tune7 = ampctrl.tune7; 247 tune8 = ampctrl.tune8; 248 tune9 = ampctrl.tune9; 249 tune10 = ampctrl.tune10; 250 }; 251 252