PEQ14.cpp (18546B)
1 2 #include "PEQ14.hpp" 3 4 void PEQ14::sampleRateChange() { 5 float sr = APP->engine->getSampleRate(); 6 for (int c = 0; c < _channels; ++c) { 7 _engines[c]->setSampleRate(sr); 8 } 9 } 10 11 bool PEQ14::active() { 12 return 13 outputs[OUT_OUTPUT].isConnected() || 14 outputs[ODDS_OUTPUT].isConnected() || 15 outputs[EVENS_OUTPUT].isConnected() || 16 outputs[OUT1_OUTPUT].isConnected() || 17 outputs[OUT2_OUTPUT].isConnected() || 18 outputs[OUT3_OUTPUT].isConnected() || 19 outputs[OUT4_OUTPUT].isConnected() || 20 outputs[OUT5_OUTPUT].isConnected() || 21 outputs[OUT6_OUTPUT].isConnected() || 22 outputs[OUT7_OUTPUT].isConnected() || 23 outputs[OUT8_OUTPUT].isConnected() || 24 outputs[OUT9_OUTPUT].isConnected() || 25 outputs[OUT10_OUTPUT].isConnected() || 26 outputs[OUT11_OUTPUT].isConnected() || 27 outputs[OUT12_OUTPUT].isConnected() || 28 outputs[OUT13_OUTPUT].isConnected() || 29 outputs[OUT14_OUTPUT].isConnected() || 30 expanderConnected(); 31 } 32 33 int PEQ14::channels() { 34 return inputs[IN_INPUT].getChannels(); 35 } 36 37 void PEQ14::addChannel(int c) { 38 const int n = 14; 39 _engines[c] = new PEQEngine(n); 40 for (int i = 0; i < n; ++i) { 41 _engines[c]->configChannel( 42 i, 43 c, 44 params[LEVEL1_PARAM + i*3], 45 params[FREQUENCY1_PARAM + i*3], 46 params[FREQUENCY_CV1_PARAM + i*3], 47 ¶ms[FREQUENCY_CV_PARAM], 48 params[BANDWIDTH_PARAM], 49 inputs[LEVEL1_INPUT + i*2], 50 inputs[FREQUENCY_CV1_INPUT + i*2], 51 inputs[FREQUENCY_CV_INPUT], 52 &inputs[BANDWIDTH_INPUT] 53 ); 54 } 55 _engines[c]->setSampleRate(APP->engine->getSampleRate()); 56 } 57 58 void PEQ14::removeChannel(int c) { 59 delete _engines[c]; 60 _engines[c] = NULL; 61 } 62 63 void PEQ14::modulate() { 64 _fullFrequencyMode = params[FMOD_PARAM].getValue() > 0.5f; 65 66 _lowMode = params[LP_PARAM].getValue() > 0.5f ? MultimodeFilter::LOWPASS_MODE : MultimodeFilter::BANDPASS_MODE; 67 _highMode = params[HP_PARAM].getValue() > 0.5f ? MultimodeFilter::HIGHPASS_MODE : MultimodeFilter::BANDPASS_MODE; 68 for (int c = 0; c < _channels; ++c) { 69 PEQEngine& e = *_engines[c]; 70 e.setLowFilterMode(_lowMode); 71 e.setHighFilterMode(_highMode); 72 e.setFrequencyMode(_fullFrequencyMode); 73 e.modulate(); 74 } 75 } 76 77 void PEQ14::processAlways(const ProcessArgs& args) { 78 outputs[OUT_OUTPUT].setChannels(_channels); 79 outputs[ODDS_OUTPUT].setChannels(_channels); 80 outputs[EVENS_OUTPUT].setChannels(_channels); 81 for (int i = 0; i < 14; ++i) { 82 outputs[OUT1_OUTPUT + i].setChannels(_channels); 83 } 84 std::fill(_rmsSums, _rmsSums + 14, 0.0f); 85 } 86 87 void PEQ14::processChannel(const ProcessArgs& args, int c) { 88 PEQEngine& e = *_engines[c]; 89 float out = e.next(inputs[IN_INPUT].getVoltage(c), _rmsSums); 90 float oddOut = 0.0f; 91 float evenOut = 0.0f; 92 float beOut = 0.0f; 93 float beOddOut = 0.0f; 94 float beEvenOut = 0.0f; 95 for (int i = 0; i < 14; ++i) { 96 float odd = e.outs[i] * (float)(i % 2 == 0 || (i == 13 && _highMode == MultimodeFilter::HIGHPASS_MODE)); 97 oddOut += odd; 98 float even = e.outs[i] * (float)(i % 2 == 1 || (i == 0 && _lowMode == MultimodeFilter::LOWPASS_MODE)); 99 evenOut += even; 100 if (outputs[OUT1_OUTPUT + i].isConnected()) { 101 outputs[OUT1_OUTPUT + i].setVoltage(e.outs[i], c); 102 } 103 else { 104 beOut += e.outs[i]; 105 beOddOut += odd; 106 beEvenOut += even; 107 } 108 } 109 if (_bandExclude) { 110 outputs[OUT_OUTPUT].setVoltage(beOut, c); 111 outputs[ODDS_OUTPUT].setVoltage(beOddOut, c); 112 outputs[EVENS_OUTPUT].setVoltage(beEvenOut, c); 113 } 114 else { 115 outputs[OUT_OUTPUT].setVoltage(out, c); 116 outputs[ODDS_OUTPUT].setVoltage(oddOut, c); 117 outputs[EVENS_OUTPUT].setVoltage(evenOut, c); 118 } 119 120 if (expanderConnected()) { 121 auto m = toExpander(); 122 m->valid = true; 123 std::copy(e.outs, e.outs + 14, m->outs[c]); 124 std::copy(e.frequencies, e.frequencies + 14, m->frequencies[c]); 125 m->bandwidths[c] = e.bandwidth; 126 m->lowLP = _lowMode == MultimodeFilter::LOWPASS_MODE; 127 m->highHP = _highMode == MultimodeFilter::HIGHPASS_MODE; 128 } 129 } 130 131 void PEQ14::postProcessAlways(const ProcessArgs& args) { 132 for (int i = 0; i < 14; ++i) { 133 _rms[i] = _rmsSums[i] * _inverseChannels; 134 } 135 136 bool ffm = params[FMOD_PARAM].getValue() > 0.5f; 137 lights[FMOD_RELATIVE_LIGHT].value = !ffm; 138 lights[FMOD_FULL_LIGHT].value = ffm; 139 } 140 141 struct PEQ14Widget : BandExcludeModuleWidget { 142 static constexpr int hp = 46; 143 144 PEQ14Widget(PEQ14* module) { 145 setModule(module); 146 box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); 147 setPanel(box.size, "PEQ14"); 148 createScrews(); 149 150 // generated by svg_widgets.rb 151 auto frequencyCvParamPosition = Vec(47.0, 59.0); 152 auto bandwidthParamPosition = Vec(47.0, 121.0); 153 auto lpParamPosition = Vec(48.5, 180.0); 154 auto hpParamPosition = Vec(48.5, 192.0); 155 auto fmodParamPosition = Vec(32.5, 252.0); 156 auto level1ParamPosition = Vec(87.5, 28.0); 157 auto frequency1ParamPosition = Vec(88.5, 184.0); 158 auto frequencyCv1ParamPosition = Vec(88.5, 224.0); 159 auto level2ParamPosition = Vec(131.5, 28.0); 160 auto frequency2ParamPosition = Vec(132.5, 184.0); 161 auto frequencyCv2ParamPosition = Vec(132.5, 224.0); 162 auto level3ParamPosition = Vec(175.5, 28.0); 163 auto frequency3ParamPosition = Vec(176.5, 184.0); 164 auto frequencyCv3ParamPosition = Vec(176.5, 224.0); 165 auto level4ParamPosition = Vec(219.5, 28.0); 166 auto frequency4ParamPosition = Vec(220.5, 184.0); 167 auto frequencyCv4ParamPosition = Vec(220.5, 224.0); 168 auto level5ParamPosition = Vec(263.5, 28.0); 169 auto frequency5ParamPosition = Vec(264.5, 184.0); 170 auto frequencyCv5ParamPosition = Vec(264.5, 224.0); 171 auto level6ParamPosition = Vec(307.5, 28.0); 172 auto frequency6ParamPosition = Vec(308.5, 184.0); 173 auto frequencyCv6ParamPosition = Vec(308.5, 224.0); 174 auto level7ParamPosition = Vec(351.5, 28.0); 175 auto frequency7ParamPosition = Vec(352.5, 184.0); 176 auto frequencyCv7ParamPosition = Vec(352.5, 224.0); 177 auto level8ParamPosition = Vec(395.5, 28.0); 178 auto frequency8ParamPosition = Vec(396.5, 184.0); 179 auto frequencyCv8ParamPosition = Vec(396.5, 224.0); 180 auto level9ParamPosition = Vec(439.5, 28.0); 181 auto frequency9ParamPosition = Vec(440.5, 184.0); 182 auto frequencyCv9ParamPosition = Vec(440.5, 224.0); 183 auto level10ParamPosition = Vec(483.5, 28.0); 184 auto frequency10ParamPosition = Vec(484.5, 184.0); 185 auto frequencyCv10ParamPosition = Vec(484.5, 224.0); 186 auto level11ParamPosition = Vec(527.5, 28.0); 187 auto frequency11ParamPosition = Vec(528.5, 184.0); 188 auto frequencyCv11ParamPosition = Vec(528.5, 224.0); 189 auto level12ParamPosition = Vec(571.5, 28.0); 190 auto frequency12ParamPosition = Vec(572.5, 184.0); 191 auto frequencyCv12ParamPosition = Vec(572.5, 224.0); 192 auto level13ParamPosition = Vec(615.5, 28.0); 193 auto frequency13ParamPosition = Vec(616.5, 184.0); 194 auto frequencyCv13ParamPosition = Vec(616.5, 224.0); 195 auto level14ParamPosition = Vec(659.5, 28.0); 196 auto frequency14ParamPosition = Vec(660.5, 184.0); 197 auto frequencyCv14ParamPosition = Vec(660.5, 224.0); 198 199 auto frequencyCvInputPosition = Vec(9.5, 56.0); 200 auto bandwidthInputPosition = Vec(9.5, 121.0); 201 auto inInputPosition = Vec(10.5, 290.0); 202 auto level1InputPosition = Vec(84.5, 255.0); 203 auto frequencyCv1InputPosition = Vec(84.5, 290.0); 204 auto level2InputPosition = Vec(128.5, 255.0); 205 auto frequencyCv2InputPosition = Vec(128.5, 290.0); 206 auto level3InputPosition = Vec(172.5, 255.0); 207 auto frequencyCv3InputPosition = Vec(172.5, 290.0); 208 auto level4InputPosition = Vec(216.5, 255.0); 209 auto frequencyCv4InputPosition = Vec(216.5, 290.0); 210 auto level5InputPosition = Vec(260.5, 255.0); 211 auto frequencyCv5InputPosition = Vec(260.5, 290.0); 212 auto level6InputPosition = Vec(304.5, 255.0); 213 auto frequencyCv6InputPosition = Vec(304.5, 290.0); 214 auto level7InputPosition = Vec(348.5, 255.0); 215 auto frequencyCv7InputPosition = Vec(348.5, 290.0); 216 auto level8InputPosition = Vec(392.5, 255.0); 217 auto frequencyCv8InputPosition = Vec(392.5, 290.0); 218 auto level9InputPosition = Vec(436.5, 255.0); 219 auto frequencyCv9InputPosition = Vec(436.5, 290.0); 220 auto level10InputPosition = Vec(480.5, 255.0); 221 auto frequencyCv10InputPosition = Vec(480.5, 290.0); 222 auto level11InputPosition = Vec(524.5, 255.0); 223 auto frequencyCv11InputPosition = Vec(524.5, 290.0); 224 auto level12InputPosition = Vec(568.5, 255.0); 225 auto frequencyCv12InputPosition = Vec(568.5, 290.0); 226 auto level13InputPosition = Vec(612.5, 255.0); 227 auto frequencyCv13InputPosition = Vec(612.5, 290.0); 228 auto level14InputPosition = Vec(656.5, 255.0); 229 auto frequencyCv14InputPosition = Vec(656.5, 290.0); 230 231 auto oddsOutputPosition = Vec(40.5, 290.0); 232 auto outOutputPosition = Vec(10.5, 325.0); 233 auto evensOutputPosition = Vec(40.5, 325.0); 234 auto out1OutputPosition = Vec(84.5, 325.0); 235 auto out2OutputPosition = Vec(128.5, 325.0); 236 auto out3OutputPosition = Vec(172.5, 325.0); 237 auto out4OutputPosition = Vec(216.5, 325.0); 238 auto out5OutputPosition = Vec(260.5, 325.0); 239 auto out6OutputPosition = Vec(304.5, 325.0); 240 auto out7OutputPosition = Vec(348.5, 325.0); 241 auto out8OutputPosition = Vec(392.5, 325.0); 242 auto out9OutputPosition = Vec(436.5, 325.0); 243 auto out10OutputPosition = Vec(480.5, 325.0); 244 auto out11OutputPosition = Vec(524.5, 325.0); 245 auto out12OutputPosition = Vec(568.5, 325.0); 246 auto out13OutputPosition = Vec(612.5, 325.0); 247 auto out14OutputPosition = Vec(656.5, 325.0); 248 249 auto fmodRelativeLightPosition = Vec(28.5, 228.0); 250 auto fmodFullLightPosition = Vec(28.5, 241.0); 251 // end generated by svg_widgets.rb 252 253 addParam(createParam<Knob16>(frequencyCvParamPosition, module, PEQ14::FREQUENCY_CV_PARAM)); 254 addParam(createParam<Knob16>(bandwidthParamPosition, module, PEQ14::BANDWIDTH_PARAM)); 255 addParam(createParam<IndicatorButtonGreen9>(lpParamPosition, module, PEQ14::LP_PARAM)); 256 addParam(createParam<IndicatorButtonGreen9>(hpParamPosition, module, PEQ14::HP_PARAM)); 257 addParam(createParam<StatefulButton9>(fmodParamPosition, module, PEQ14::FMOD_PARAM)); 258 addSlider(level1ParamPosition, module, PEQ14::LEVEL1_PARAM, module ? &module->_rms[0] : NULL); 259 addParam(createParam<Knob16>(frequency1ParamPosition, module, PEQ14::FREQUENCY1_PARAM)); 260 addParam(createParam<Knob16>(frequencyCv1ParamPosition, module, PEQ14::FREQUENCY_CV1_PARAM)); 261 addSlider(level2ParamPosition, module, PEQ14::LEVEL2_PARAM, module ? &module->_rms[1] : NULL); 262 addParam(createParam<Knob16>(frequency2ParamPosition, module, PEQ14::FREQUENCY2_PARAM)); 263 addParam(createParam<Knob16>(frequencyCv2ParamPosition, module, PEQ14::FREQUENCY_CV2_PARAM)); 264 addSlider(level3ParamPosition, module, PEQ14::LEVEL3_PARAM, module ? &module->_rms[2] : NULL); 265 addParam(createParam<Knob16>(frequency3ParamPosition, module, PEQ14::FREQUENCY3_PARAM)); 266 addParam(createParam<Knob16>(frequencyCv3ParamPosition, module, PEQ14::FREQUENCY_CV3_PARAM)); 267 addSlider(level4ParamPosition, module, PEQ14::LEVEL4_PARAM, module ? &module->_rms[3] : NULL); 268 addParam(createParam<Knob16>(frequency4ParamPosition, module, PEQ14::FREQUENCY4_PARAM)); 269 addParam(createParam<Knob16>(frequencyCv4ParamPosition, module, PEQ14::FREQUENCY_CV4_PARAM)); 270 addSlider(level5ParamPosition, module, PEQ14::LEVEL5_PARAM, module ? &module->_rms[4] : NULL); 271 addParam(createParam<Knob16>(frequency5ParamPosition, module, PEQ14::FREQUENCY5_PARAM)); 272 addParam(createParam<Knob16>(frequencyCv5ParamPosition, module, PEQ14::FREQUENCY_CV5_PARAM)); 273 addSlider(level6ParamPosition, module, PEQ14::LEVEL6_PARAM, module ? &module->_rms[5] : NULL); 274 addParam(createParam<Knob16>(frequency6ParamPosition, module, PEQ14::FREQUENCY6_PARAM)); 275 addParam(createParam<Knob16>(frequencyCv6ParamPosition, module, PEQ14::FREQUENCY_CV6_PARAM)); 276 addSlider(level7ParamPosition, module, PEQ14::LEVEL7_PARAM, module ? &module->_rms[6] : NULL); 277 addParam(createParam<Knob16>(frequency7ParamPosition, module, PEQ14::FREQUENCY7_PARAM)); 278 addParam(createParam<Knob16>(frequencyCv7ParamPosition, module, PEQ14::FREQUENCY_CV7_PARAM)); 279 addSlider(level8ParamPosition, module, PEQ14::LEVEL8_PARAM, module ? &module->_rms[7] : NULL); 280 addParam(createParam<Knob16>(frequency8ParamPosition, module, PEQ14::FREQUENCY8_PARAM)); 281 addParam(createParam<Knob16>(frequencyCv8ParamPosition, module, PEQ14::FREQUENCY_CV8_PARAM)); 282 addSlider(level9ParamPosition, module, PEQ14::LEVEL9_PARAM, module ? &module->_rms[8] : NULL); 283 addParam(createParam<Knob16>(frequency9ParamPosition, module, PEQ14::FREQUENCY9_PARAM)); 284 addParam(createParam<Knob16>(frequencyCv9ParamPosition, module, PEQ14::FREQUENCY_CV9_PARAM)); 285 addSlider(level10ParamPosition, module, PEQ14::LEVEL10_PARAM, module ? &module->_rms[9] : NULL); 286 addParam(createParam<Knob16>(frequency10ParamPosition, module, PEQ14::FREQUENCY10_PARAM)); 287 addParam(createParam<Knob16>(frequencyCv10ParamPosition, module, PEQ14::FREQUENCY_CV10_PARAM)); 288 addSlider(level11ParamPosition, module, PEQ14::LEVEL11_PARAM, module ? &module->_rms[10] : NULL); 289 addParam(createParam<Knob16>(frequency11ParamPosition, module, PEQ14::FREQUENCY11_PARAM)); 290 addParam(createParam<Knob16>(frequencyCv11ParamPosition, module, PEQ14::FREQUENCY_CV11_PARAM)); 291 addSlider(level12ParamPosition, module, PEQ14::LEVEL12_PARAM, module ? &module->_rms[11] : NULL); 292 addParam(createParam<Knob16>(frequency12ParamPosition, module, PEQ14::FREQUENCY12_PARAM)); 293 addParam(createParam<Knob16>(frequencyCv12ParamPosition, module, PEQ14::FREQUENCY_CV12_PARAM)); 294 addSlider(level13ParamPosition, module, PEQ14::LEVEL13_PARAM, module ? &module->_rms[12] : NULL); 295 addParam(createParam<Knob16>(frequency13ParamPosition, module, PEQ14::FREQUENCY13_PARAM)); 296 addParam(createParam<Knob16>(frequencyCv13ParamPosition, module, PEQ14::FREQUENCY_CV13_PARAM)); 297 addSlider(level14ParamPosition, module, PEQ14::LEVEL14_PARAM, module ? &module->_rms[13] : NULL); 298 addParam(createParam<Knob16>(frequency14ParamPosition, module, PEQ14::FREQUENCY14_PARAM)); 299 addParam(createParam<Knob16>(frequencyCv14ParamPosition, module, PEQ14::FREQUENCY_CV14_PARAM)); 300 301 addInput(createInput<Port24>(frequencyCvInputPosition, module, PEQ14::FREQUENCY_CV_INPUT)); 302 addInput(createInput<Port24>(bandwidthInputPosition, module, PEQ14::BANDWIDTH_INPUT)); 303 addInput(createInput<Port24>(inInputPosition, module, PEQ14::IN_INPUT)); 304 addInput(createInput<Port24>(level1InputPosition, module, PEQ14::LEVEL1_INPUT)); 305 addInput(createInput<Port24>(frequencyCv1InputPosition, module, PEQ14::FREQUENCY_CV1_INPUT)); 306 addInput(createInput<Port24>(level2InputPosition, module, PEQ14::LEVEL2_INPUT)); 307 addInput(createInput<Port24>(frequencyCv2InputPosition, module, PEQ14::FREQUENCY_CV2_INPUT)); 308 addInput(createInput<Port24>(level3InputPosition, module, PEQ14::LEVEL3_INPUT)); 309 addInput(createInput<Port24>(frequencyCv3InputPosition, module, PEQ14::FREQUENCY_CV3_INPUT)); 310 addInput(createInput<Port24>(level4InputPosition, module, PEQ14::LEVEL4_INPUT)); 311 addInput(createInput<Port24>(frequencyCv4InputPosition, module, PEQ14::FREQUENCY_CV4_INPUT)); 312 addInput(createInput<Port24>(level5InputPosition, module, PEQ14::LEVEL5_INPUT)); 313 addInput(createInput<Port24>(frequencyCv5InputPosition, module, PEQ14::FREQUENCY_CV5_INPUT)); 314 addInput(createInput<Port24>(level6InputPosition, module, PEQ14::LEVEL6_INPUT)); 315 addInput(createInput<Port24>(frequencyCv6InputPosition, module, PEQ14::FREQUENCY_CV6_INPUT)); 316 addInput(createInput<Port24>(level7InputPosition, module, PEQ14::LEVEL7_INPUT)); 317 addInput(createInput<Port24>(frequencyCv7InputPosition, module, PEQ14::FREQUENCY_CV7_INPUT)); 318 addInput(createInput<Port24>(level8InputPosition, module, PEQ14::LEVEL8_INPUT)); 319 addInput(createInput<Port24>(frequencyCv8InputPosition, module, PEQ14::FREQUENCY_CV8_INPUT)); 320 addInput(createInput<Port24>(level9InputPosition, module, PEQ14::LEVEL9_INPUT)); 321 addInput(createInput<Port24>(frequencyCv9InputPosition, module, PEQ14::FREQUENCY_CV9_INPUT)); 322 addInput(createInput<Port24>(level10InputPosition, module, PEQ14::LEVEL10_INPUT)); 323 addInput(createInput<Port24>(frequencyCv10InputPosition, module, PEQ14::FREQUENCY_CV10_INPUT)); 324 addInput(createInput<Port24>(level11InputPosition, module, PEQ14::LEVEL11_INPUT)); 325 addInput(createInput<Port24>(frequencyCv11InputPosition, module, PEQ14::FREQUENCY_CV11_INPUT)); 326 addInput(createInput<Port24>(level12InputPosition, module, PEQ14::LEVEL12_INPUT)); 327 addInput(createInput<Port24>(frequencyCv12InputPosition, module, PEQ14::FREQUENCY_CV12_INPUT)); 328 addInput(createInput<Port24>(level13InputPosition, module, PEQ14::LEVEL13_INPUT)); 329 addInput(createInput<Port24>(frequencyCv13InputPosition, module, PEQ14::FREQUENCY_CV13_INPUT)); 330 addInput(createInput<Port24>(level14InputPosition, module, PEQ14::LEVEL14_INPUT)); 331 addInput(createInput<Port24>(frequencyCv14InputPosition, module, PEQ14::FREQUENCY_CV14_INPUT)); 332 333 addOutput(createOutput<Port24>(oddsOutputPosition, module, PEQ14::ODDS_OUTPUT)); 334 addOutput(createOutput<Port24>(outOutputPosition, module, PEQ14::OUT_OUTPUT)); 335 addOutput(createOutput<Port24>(evensOutputPosition, module, PEQ14::EVENS_OUTPUT)); 336 addOutput(createOutput<Port24>(out1OutputPosition, module, PEQ14::OUT1_OUTPUT)); 337 addOutput(createOutput<Port24>(out2OutputPosition, module, PEQ14::OUT2_OUTPUT)); 338 addOutput(createOutput<Port24>(out3OutputPosition, module, PEQ14::OUT3_OUTPUT)); 339 addOutput(createOutput<Port24>(out4OutputPosition, module, PEQ14::OUT4_OUTPUT)); 340 addOutput(createOutput<Port24>(out5OutputPosition, module, PEQ14::OUT5_OUTPUT)); 341 addOutput(createOutput<Port24>(out6OutputPosition, module, PEQ14::OUT6_OUTPUT)); 342 addOutput(createOutput<Port24>(out7OutputPosition, module, PEQ14::OUT7_OUTPUT)); 343 addOutput(createOutput<Port24>(out8OutputPosition, module, PEQ14::OUT8_OUTPUT)); 344 addOutput(createOutput<Port24>(out9OutputPosition, module, PEQ14::OUT9_OUTPUT)); 345 addOutput(createOutput<Port24>(out10OutputPosition, module, PEQ14::OUT10_OUTPUT)); 346 addOutput(createOutput<Port24>(out11OutputPosition, module, PEQ14::OUT11_OUTPUT)); 347 addOutput(createOutput<Port24>(out12OutputPosition, module, PEQ14::OUT12_OUTPUT)); 348 addOutput(createOutput<Port24>(out13OutputPosition, module, PEQ14::OUT13_OUTPUT)); 349 addOutput(createOutput<Port24>(out14OutputPosition, module, PEQ14::OUT14_OUTPUT)); 350 351 addChild(createLight<BGSmallLight<GreenLight>>(fmodRelativeLightPosition, module, PEQ14::FMOD_RELATIVE_LIGHT)); 352 addChild(createLight<BGSmallLight<GreenLight>>(fmodFullLightPosition, module, PEQ14::FMOD_FULL_LIGHT)); 353 } 354 355 void addSlider(Vec position, PEQ14* module, int id, float* rms) { 356 auto slider = createParam<VUSlider151>(position, module, id); 357 if (rms) { 358 dynamic_cast<VUSlider*>(slider)->setVULevel(rms); 359 } 360 addParam(slider); 361 } 362 }; 363 364 Model* modelPEQ14 = createModel<PEQ14, PEQ14Widget>("Bogaudio-PEQ14", "PEQ14", "14-channel parametric equalizer / filter bank", "Filter", "Vocoder", "Polyphonic");