BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit 6f04039e200f0c6f752541bc6040e2f4900066e2
parent 71671d4f6c5b7c59163f2d0c378c627d114c0015
Author: Matt Demanett <matt@demanett.net>
Date:   Thu, 25 Jun 2020 22:29:35 -0400

PEQ6XO, PEQ14XO: per-band output expanders for PEQ6, PEQ14.

Diffstat:
Mplugin.json | 22++++++++++++++++++++++
Mres-src/FiveHP-src.svg | 4++--
Mres-src/Mix2-src.svg | 4++--
Ares-src/PEQ14XO-src.svg | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ares-src/PEQ6XO-src.svg | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mres/FiveHP.svg | 0
Mres/Mix2.svg | 0
Ares/PEQ14XO.svg | 0
Ares/PEQ6XO.svg | 0
Msrc/PEQ14.cpp | 3+++
Msrc/PEQ14.hpp | 9++++-----
Asrc/PEQ14XO.cpp | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/PEQ14XO.hpp | 43+++++++++++++++++++++++++++++++++++++++++++
Asrc/PEQ14_shared.hpp | 22++++++++++++++++++++++
Msrc/PEQ6.cpp | 3+++
Msrc/PEQ6.hpp | 9++++-----
Asrc/PEQ6XO.cpp | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/PEQ6XO.hpp | 35+++++++++++++++++++++++++++++++++++
Asrc/PEQ6_shared.hpp | 22++++++++++++++++++++++
Msrc/bogaudio.cpp | 4++++
20 files changed, 452 insertions(+), 14 deletions(-)

diff --git a/plugin.json b/plugin.json @@ -184,6 +184,17 @@ ] }, { + "slug": "Bogaudio-PEQ6XO", + "name": "PEQ6XO", + "description": "PEQ6 band outputs expander", + "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#peq6xo", + "tags": [ + "Filter", + "Expander", + "Polyphonic" + ] + }, + { "slug": "Bogaudio-PEQ14", "name": "PEQ14", "description": "6-channel parametric equalizer / filter bank", @@ -194,6 +205,17 @@ ] }, { + "slug": "Bogaudio-PEQ14XO", + "name": "PEQ14XO", + "description": "PEQ14 band outputs expander", + "manualUrl": "https://github.com/bogaudio/BogaudioModules/blob/master/README.md#peq14xo", + "tags": [ + "Filter", + "Expander", + "Polyphonic" + ] + }, + { "slug": "Bogaudio-DADSRH", "name": "DADSR(H)", "description": "Advanced envelope generator", diff --git a/res-src/FiveHP-src.svg b/res-src/FiveHP-src.svg @@ -26,8 +26,8 @@ </defs> <rect width="100%" height="100%" fill="#ddd" /> - <polyline points="1,1 75,1 75,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> - <polyline points="0.5,0.5 75.5,0.5 75.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> + <polyline points="1,1 74,1 74,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> + <polyline points="0.5,0.5 74.5,0.5 74.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> <polyline points="0,0 75,0 75,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" /> <text class="title" x="35" y="17" font-size="9pt" letter-spacing="3px">5HP</text> diff --git a/res-src/Mix2-src.svg b/res-src/Mix2-src.svg @@ -92,8 +92,8 @@ </defs> <rect width="100%" height="100%" fill="#ddd" /> - <polyline points="1,1 75,1 75,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> - <polyline points="0.5,0.5 75.5,0.5 75.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> + <polyline points="1,1 74,1 74,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> + <polyline points="0.5,0.5 74.5,0.5 74.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> <polyline points="0,0 75,0 75,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" /> <text class="title" x="30" y="17" font-size="9pt" letter-spacing="3px">MIX2</text> diff --git a/res-src/PEQ14XO-src.svg b/res-src/PEQ14XO-src.svg @@ -0,0 +1,89 @@ +<svg + version="1.1" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + width="75" + height="380" + viewBox="0 0 75 380" +> + <style> + text { + fill: #333; + font-family: 'Roboto', sans-serif; + font-weight: bold; + } + text.title { + font-family: 'Comfortaa', sans-serif; + font-weight: normal; + } + text.brand { + font-family: 'Audiowide', sans-serif; + font-weight: bold; + } + </style> + + <defs> + <symbol id="input" viewBox="0 0 24px 24px"> + <g transform="translate(12 12)"> + <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#0f0" fill="#0f0" /> + <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#0f0" fill="none" /> + </g> + </symbol> + + <symbol id="output" viewBox="0 0 24px 24px"> + <g transform="translate(12 12)"> + <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00" /> + <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none" /> + </g> + </symbol> + </defs> + + <rect width="100%" height="100%" fill="#ddd" /> + <polyline points="1,1 74,1 74,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> + <polyline points="0.5,0.5 74.5,0.5 74.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> + <polyline points="0,0 75,0 75,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" /> + + <text class="title" x="20" y="14" font-size="7pt" letter-spacing="1px">PEQ14XO</text> + <!-- <text class="title" x="15" y="17" font-size="9pt" letter-spacing="3px" transform="translate(75 -8) rotate(90)">PEQ14-XO</text> --> + <g transform="translate(25 374)"> + <text class="brand" font-size="6.5pt" letter-spacing="2px">BGA</text> + <rect width="2" height="2" fill="#ddd" transform="translate(11.5 -4)" /> + </g> + + <g transform="translate(5.5 40)"> + <rect width="64" height="260" rx="5" fill="#bbb" transform="translate(0 -10)" /> + + <text font-size="5pt" letter-spacing="2px" transform="translate(6 0)">BAND OUTS</text> + <use id="BAND1_OUTPUT" xlink:href="#output" transform="translate(5 3)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 35)">1</text> + <use id="BAND2_OUTPUT" xlink:href="#output" transform="translate(5 38)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 70)">2</text> + <use id="BAND3_OUTPUT" xlink:href="#output" transform="translate(5 73)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 105)">3</text> + <use id="BAND4_OUTPUT" xlink:href="#output" transform="translate(5 108)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 140)">4</text> + <use id="BAND5_OUTPUT" xlink:href="#output" transform="translate(5 143)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 175)">5</text> + <use id="BAND6_OUTPUT" xlink:href="#output" transform="translate(5 178)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 210)">6</text> + <use id="BAND7_OUTPUT" xlink:href="#output" transform="translate(5 213)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 245)">7</text> + + <g transform="translate(31 0)"> + <use id="BAND8_OUTPUT" xlink:href="#output" transform="translate(5 3)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 35)">8</text> + <use id="BAND9_OUTPUT" xlink:href="#output" transform="translate(5 38)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 70)">9</text> + <use id="BAND10_OUTPUT" xlink:href="#output" transform="translate(5 73)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(12.5 105)">10</text> + <use id="BAND11_OUTPUT" xlink:href="#output" transform="translate(5 108)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(12.5 140)">11</text> + <use id="BAND12_OUTPUT" xlink:href="#output" transform="translate(5 143)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(12.5 175)">12</text> + <use id="BAND13_OUTPUT" xlink:href="#output" transform="translate(5 178)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(12.5 210)">13</text> + <use id="BAND14_OUTPUT" xlink:href="#output" transform="translate(5 213)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(12.5 245)">14</text> + </g> + </g> +</svg> diff --git a/res-src/PEQ6XO-src.svg b/res-src/PEQ6XO-src.svg @@ -0,0 +1,63 @@ +<svg + version="1.1" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + width="45" + height="380" + viewBox="0 0 45 380" +> + <style> + text { + fill: #333; + font-family: 'Roboto', sans-serif; + font-weight: bold; + } + text.title { + font-family: 'Comfortaa', sans-serif; + font-weight: normal; + } + text.brand { + font-family: 'Audiowide', sans-serif; + font-weight: bold; + } + </style> + + <defs> + <symbol id="output" viewBox="0 0 24px 24px"> + <g transform="translate(12 12)"> + <circle cx="0" cy="0" r="5" stroke-width="1" stroke="#f00" fill="#f00" /> + <circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none" /> + </g> + </symbol> + </defs> + + <rect width="100%" height="100%" fill="#ddd" /> + <polyline points="1,1 44,1 44,379 1,379 1,1" stroke="#e4e4e4" stroke-width="0.5" fill="none" /> + <polyline points="0.5,0.5 44.5,0.5 44.5,379.5 0.5,379.5 0.5,0.5" stroke="#ebebeb" stroke-width="0.8" fill="none" /> + <polyline points="0,0 45,0 45,380 0,380 0,0" stroke="#f2f2f2" stroke-width="1" fill="none" /> + + <g transform="rotate(-90) translate(-376 13)"> + <text class="title" font-size="7pt" letter-spacing="2.5px">PEQ6-XO</text> + <g transform="translate(0 12)"> + <text class="brand" font-size="7pt" letter-spacing="2px">BGA</text> + <rect width="3.0" height="3" fill="#ddd" transform="translate(11.5 -5)" /> + </g> + </g> + + <g transform="translate(5.5 40)"> + <rect width="34" height="225" rx="5" fill="#bbb" transform="translate(0 -10)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(8.5 0)">OUT</text> + <use id="BAND1_OUTPUT" xlink:href="#output" transform="translate(5 3)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 35)">1</text> + <use id="BAND2_OUTPUT" xlink:href="#output" transform="translate(5 38)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 70)">2</text> + <use id="BAND3_OUTPUT" xlink:href="#output" transform="translate(5 73)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 105)">3</text> + <use id="BAND4_OUTPUT" xlink:href="#output" transform="translate(5 108)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 140)">4</text> + <use id="BAND5_OUTPUT" xlink:href="#output" transform="translate(5 143)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 175)">5</text> + <use id="BAND6_OUTPUT" xlink:href="#output" transform="translate(5 178)" /> + <text font-size="5pt" letter-spacing="2px" transform="translate(15 210)">6</text> + </g> +</svg> diff --git a/res/FiveHP.svg b/res/FiveHP.svg Binary files differ. diff --git a/res/Mix2.svg b/res/Mix2.svg Binary files differ. diff --git a/res/PEQ14XO.svg b/res/PEQ14XO.svg Binary files differ. diff --git a/res/PEQ6XO.svg b/res/PEQ6XO.svg Binary files differ. diff --git a/src/PEQ14.cpp b/src/PEQ14.cpp @@ -90,6 +90,9 @@ void PEQ14::processChannel(const ProcessArgs& args, int c) { float outs[14] {}; float out = _engines[c]->next(inputs[IN_INPUT].getVoltage(c), outs, _rmsSums); outputs[OUT_OUTPUT].setVoltage(out, c); + if (expanderConnected()) { + std::copy(outs, outs + 14, toExpander()->outs[c]); + } float oddOut = 0.0f; float evenOut = 0.0f; diff --git a/src/PEQ14.hpp b/src/PEQ14.hpp @@ -1,13 +1,10 @@ #pragma once -#include "bogaudio.hpp" -#include "parametric_eq.hpp" - -extern Model* modelPEQ14; +#include "PEQ14_shared.hpp" namespace bogaudio { -struct PEQ14 : BGModule { +struct PEQ14 : ExpandableModule<PEQ14ExpanderMessage, BGModule> { enum ParamsIds { EF_RESPONSE_PARAM, FREQUENCY_CV_PARAM, @@ -183,6 +180,8 @@ struct PEQ14 : BGModule { configParam(LEVEL14_PARAM, 0.0f, 1.0f, levelDefault, "Channel 6 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY14_PARAM, 0.0f, 1.0f, 0.5873670f, "Channel 6 frequency", " HZ"); configParam(FREQUENCY_CV14_PARAM, -1.0f, 1.0f, 1.0f, "Channel 6 frequency CV attenuation", "%", 0.0f, 100.0f); + + setExpanderModel(modelPEQ14XO); } void sampleRateChange() override; diff --git a/src/PEQ14XO.cpp b/src/PEQ14XO.cpp @@ -0,0 +1,75 @@ + +#include "PEQ14XO.hpp" + +void PEQ14XO::processAll(const ProcessArgs& args) { + for (int i = 0; i < 14; ++i) { + outputs[BAND1_OUTPUT + i].setChannels(_channels); + } +} + +void PEQ14XO::processChannel(const ProcessArgs& args, int c) { + if (baseConnected()) { + float* outs = fromBase()->outs[c]; + for (int i = 0; i < 14; ++i) { + outputs[BAND1_OUTPUT + i].setVoltage(outs[i], c); + } + } + else { + for (int i = 0; i < 14; ++i) { + outputs[BAND1_OUTPUT + i].setVoltage(0.0f, c); + } + } +} + +struct PEQ14XOWidget : ModuleWidget { + static constexpr int hp = 5; + + PEQ14XOWidget(PEQ14XO* module) { + setModule(module); + box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); + + { + SvgPanel *panel = new SvgPanel(); + panel->box.size = box.size; + panel->setBackground(APP->window->loadSvg(asset::plugin(pluginInstance, "res/PEQ14XO.svg"))); + addChild(panel); + } + + addChild(createWidget<ScrewSilver>(Vec(0, 0))); + addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365))); + + // generated by svg_widgets.rb + auto band1OutputPosition = Vec(10.5, 43.0); + auto band2OutputPosition = Vec(10.5, 78.0); + auto band3OutputPosition = Vec(10.5, 113.0); + auto band4OutputPosition = Vec(10.5, 148.0); + auto band5OutputPosition = Vec(10.5, 183.0); + auto band6OutputPosition = Vec(10.5, 218.0); + auto band7OutputPosition = Vec(10.5, 253.0); + auto band8OutputPosition = Vec(41.5, 43.0); + auto band9OutputPosition = Vec(41.5, 78.0); + auto band10OutputPosition = Vec(41.5, 113.0); + auto band11OutputPosition = Vec(41.5, 148.0); + auto band12OutputPosition = Vec(41.5, 183.0); + auto band13OutputPosition = Vec(41.5, 218.0); + auto band14OutputPosition = Vec(41.5, 253.0); + // end generated by svg_widgets.rb + + addOutput(createOutput<Port24>(band1OutputPosition, module, PEQ14XO::BAND1_OUTPUT)); + addOutput(createOutput<Port24>(band2OutputPosition, module, PEQ14XO::BAND2_OUTPUT)); + addOutput(createOutput<Port24>(band3OutputPosition, module, PEQ14XO::BAND3_OUTPUT)); + addOutput(createOutput<Port24>(band4OutputPosition, module, PEQ14XO::BAND4_OUTPUT)); + addOutput(createOutput<Port24>(band5OutputPosition, module, PEQ14XO::BAND5_OUTPUT)); + addOutput(createOutput<Port24>(band6OutputPosition, module, PEQ14XO::BAND6_OUTPUT)); + addOutput(createOutput<Port24>(band7OutputPosition, module, PEQ14XO::BAND7_OUTPUT)); + addOutput(createOutput<Port24>(band8OutputPosition, module, PEQ14XO::BAND8_OUTPUT)); + addOutput(createOutput<Port24>(band9OutputPosition, module, PEQ14XO::BAND9_OUTPUT)); + addOutput(createOutput<Port24>(band10OutputPosition, module, PEQ14XO::BAND10_OUTPUT)); + addOutput(createOutput<Port24>(band11OutputPosition, module, PEQ14XO::BAND11_OUTPUT)); + addOutput(createOutput<Port24>(band12OutputPosition, module, PEQ14XO::BAND12_OUTPUT)); + addOutput(createOutput<Port24>(band13OutputPosition, module, PEQ14XO::BAND13_OUTPUT)); + addOutput(createOutput<Port24>(band14OutputPosition, module, PEQ14XO::BAND14_OUTPUT)); + } +}; + +Model* modelPEQ14XO = createModel<PEQ14XO, PEQ14XOWidget>("Bogaudio-PEQ14XO", "PEQ14XO", "PEQ14 band outputs expander", "Filter", "Expander", "Polyphonic"); diff --git a/src/PEQ14XO.hpp b/src/PEQ14XO.hpp @@ -0,0 +1,43 @@ +#pragma once + +#include "PEQ14_shared.hpp" + +namespace bogaudio { + +struct PEQ14XO : ExpanderModule<PEQ14ExpanderMessage, BGModule> { + enum ParamsIds { + NUM_PARAMS + }; + + enum InputsIds { + NUM_INPUTS + }; + + enum OutputsIds { + BAND1_OUTPUT, + BAND2_OUTPUT, + BAND3_OUTPUT, + BAND4_OUTPUT, + BAND5_OUTPUT, + BAND6_OUTPUT, + BAND7_OUTPUT, + BAND8_OUTPUT, + BAND9_OUTPUT, + BAND10_OUTPUT, + BAND11_OUTPUT, + BAND12_OUTPUT, + BAND13_OUTPUT, + BAND14_OUTPUT, + NUM_OUTPUTS + }; + + PEQ14XO() { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); + setBaseModel(modelPEQ14); + } + + void processAll(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int c) override; +}; + +} // namespace bogaudio diff --git a/src/PEQ14_shared.hpp b/src/PEQ14_shared.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "bogaudio.hpp" +#include "expanders.hpp" +#include "parametric_eq.hpp" + +extern Model* modelPEQ14; +extern Model* modelPEQ14XO; + +namespace bogaudio { + +struct PEQ14ExpanderMessage : ExpanderMessage { + float outs[BGModule::maxChannels][14]; + + PEQ14ExpanderMessage() { + for (int c = 0; c < BGModule::maxChannels; ++c) { + std::fill(outs[c], outs[c] + 14, 0.0f); + } + } +}; + +} // namespace bogaudio diff --git a/src/PEQ6.cpp b/src/PEQ6.cpp @@ -84,6 +84,9 @@ void PEQ6::processChannel(const ProcessArgs& args, int c) { float outs[6] {}; float out = _engines[c]->next(inputs[IN_INPUT].getVoltage(c), outs, _rmsSums); outputs[OUT_OUTPUT].setVoltage(out, c); + if (expanderConnected()) { + std::copy(outs, outs + 6, toExpander()->outs[c]); + } for (int i = 0; i < 6; ++i) { outputs[EF1_OUTPUT + i].setVoltage(2.0f * _efs[c][i].next(outs[i]), c); diff --git a/src/PEQ6.hpp b/src/PEQ6.hpp @@ -1,13 +1,10 @@ #pragma once -#include "bogaudio.hpp" -#include "parametric_eq.hpp" - -extern Model* modelPEQ6; +#include "PEQ6_shared.hpp" namespace bogaudio { -struct PEQ6 : BGModule { +struct PEQ6 : ExpandableModule<PEQ6ExpanderMessage, BGModule> { enum ParamsIds { EF_RESPONSE_PARAM, FREQUENCY_CV_PARAM, @@ -106,6 +103,8 @@ struct PEQ6 : BGModule { configParam(LEVEL6_PARAM, 0.0f, 1.0f, levelDefault, "Channel 6 level", " dB", 0.0f, PEQChannel::maxDecibels - PEQChannel::minDecibels, PEQChannel::minDecibels); configParam<ScaledSquaringParamQuantity<(int)PEQChannel::maxFrequency>>(FREQUENCY6_PARAM, 0.0f, 1.0f, 0.3535534f, "Channel 6 frequency", " HZ"); configParam(FREQUENCY_CV6_PARAM, -1.0f, 1.0f, 1.0f, "Channel 6 frequency CV attenuation", "%", 0.0f, 100.0f); + + setExpanderModel(modelPEQ6XO); } void sampleRateChange() override; diff --git a/src/PEQ6XO.cpp b/src/PEQ6XO.cpp @@ -0,0 +1,59 @@ + +#include "PEQ6XO.hpp" + +void PEQ6XO::processAll(const ProcessArgs& args) { + for (int i = 0; i < 6; ++i) { + outputs[BAND1_OUTPUT + i].setChannels(_channels); + } +} + +void PEQ6XO::processChannel(const ProcessArgs& args, int c) { + if (baseConnected()) { + float* outs = fromBase()->outs[c]; + for (int i = 0; i < 6; ++i) { + outputs[BAND1_OUTPUT + i].setVoltage(outs[i], c); + } + } + else { + for (int i = 0; i < 6; ++i) { + outputs[BAND1_OUTPUT + i].setVoltage(0.0f, c); + } + } +} + +struct PEQ6XOWidget : ModuleWidget { + static constexpr int hp = 3; + + PEQ6XOWidget(PEQ6XO* module) { + setModule(module); + box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); + + { + SvgPanel *panel = new SvgPanel(); + panel->box.size = box.size; + panel->setBackground(APP->window->loadSvg(asset::plugin(pluginInstance, "res/PEQ6XO.svg"))); + addChild(panel); + } + + addChild(createWidget<ScrewSilver>(Vec(0, 0))); + addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365))); + + // generated by svg_widgets.rb + auto band1OutputPosition = Vec(10.5, 43.0); + auto band2OutputPosition = Vec(10.5, 78.0); + auto band3OutputPosition = Vec(10.5, 113.0); + auto band4OutputPosition = Vec(10.5, 148.0); + auto band5OutputPosition = Vec(10.5, 183.0); + auto band6OutputPosition = Vec(10.5, 218.0); + // end generated by svg_widgets.rb + + addOutput(createOutput<Port24>(band1OutputPosition, module, PEQ6XO::BAND1_OUTPUT)); + addOutput(createOutput<Port24>(band2OutputPosition, module, PEQ6XO::BAND2_OUTPUT)); + addOutput(createOutput<Port24>(band3OutputPosition, module, PEQ6XO::BAND3_OUTPUT)); + addOutput(createOutput<Port24>(band4OutputPosition, module, PEQ6XO::BAND4_OUTPUT)); + addOutput(createOutput<Port24>(band5OutputPosition, module, PEQ6XO::BAND5_OUTPUT)); + addOutput(createOutput<Port24>(band6OutputPosition, module, PEQ6XO::BAND6_OUTPUT)); + } +}; + +Model* modelPEQ6XO = createModel<PEQ6XO, PEQ6XOWidget>("Bogaudio-PEQ6XO", "PEQ6XO", "PEQ6 band outputs expander", "Filter", "Expander", "Polyphonic"); diff --git a/src/PEQ6XO.hpp b/src/PEQ6XO.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "PEQ6_shared.hpp" + +namespace bogaudio { + +struct PEQ6XO : ExpanderModule<PEQ6ExpanderMessage, BGModule> { + enum ParamsIds { + NUM_PARAMS + }; + + enum InputsIds { + NUM_INPUTS + }; + + enum OutputsIds { + BAND1_OUTPUT, + BAND2_OUTPUT, + BAND3_OUTPUT, + BAND4_OUTPUT, + BAND5_OUTPUT, + BAND6_OUTPUT, + NUM_OUTPUTS + }; + + PEQ6XO() { + config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS); + setBaseModel(modelPEQ6); + } + + void processAll(const ProcessArgs& args) override; + void processChannel(const ProcessArgs& args, int c) override; +}; + +} // namespace bogaudio diff --git a/src/PEQ6_shared.hpp b/src/PEQ6_shared.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "bogaudio.hpp" +#include "expanders.hpp" +#include "parametric_eq.hpp" + +extern Model* modelPEQ6; +extern Model* modelPEQ6XO; + +namespace bogaudio { + +struct PEQ6ExpanderMessage : ExpanderMessage { + float outs[BGModule::maxChannels][6]; + + PEQ6ExpanderMessage() { + for (int c = 0; c < BGModule::maxChannels; ++c) { + std::fill(outs[c], outs[c] + 6, 0.0f); + } + } +}; + +} // namespace bogaudio diff --git a/src/bogaudio.cpp b/src/bogaudio.cpp @@ -58,7 +58,9 @@ #include "Pan.hpp" #include "PEQ.hpp" #include "PEQ6.hpp" +#include "PEQ6XO.hpp" #include "PEQ14.hpp" +#include "PEQ14XO.hpp" #include "Pgmr.hpp" #include "PgmrX.hpp" #include "PolyCon8.hpp" @@ -125,7 +127,9 @@ void init(rack::Plugin *p) { p->addModel(modelEQS); p->addModel(modelPEQ); p->addModel(modelPEQ6); + p->addModel(modelPEQ6XO); p->addModel(modelPEQ14); + p->addModel(modelPEQ14XO); p->addModel(modelDADSRH); p->addModel(modelDADSRHPlus);