mixer.hpp (2466B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 #include "dsp/filters/utility.hpp" 5 #include "dsp/signal.hpp" 6 7 using namespace bogaudio::dsp; 8 9 namespace bogaudio { 10 11 #define MIXER_PAN_SLEW_MS 10.0f 12 13 struct MixerChannel { 14 static const float maxDecibels; 15 static const float minDecibels; 16 static const float levelSlewTimeMS; 17 18 Amplifier _amplifier; 19 bogaudio::dsp::SlewLimiter _levelSL; 20 bogaudio::dsp::SlewLimiter _levelCVSL; 21 RootMeanSquare _rms; 22 23 Param& _levelParam; 24 Param& _muteParam; 25 Input& _levelInput; 26 Input* _muteInput; 27 28 float out = 0.0f; 29 float rms = 0.0f; 30 31 MixerChannel( 32 Param& level, 33 Param& mute, 34 Input& levelCv, 35 float sampleRate = 1000.0f, 36 Input* muteCv = NULL 37 ) 38 : _levelParam(level) 39 , _muteParam(mute) 40 , _levelInput(levelCv) 41 , _muteInput(muteCv) 42 { 43 setSampleRate(sampleRate); 44 _rms.setSensitivity(0.05f); 45 } 46 47 void setSampleRate(float sampleRate); 48 void reset(); 49 void next(float sample, bool solo, int c = 0, bool linearCV = false); // outputs on members out, rms. 50 }; 51 52 struct LinearCVMixerModule : BGModule { 53 bool _linearCV = false; 54 55 json_t* saveToJson(json_t* root) override; 56 void loadFromJson(json_t* root) override; 57 }; 58 59 struct LinearCVMixerWidget : BGModuleWidget { 60 void contextMenu(Menu* menu) override; 61 }; 62 63 struct DimmableMixerModule : LinearCVMixerModule { 64 float _dimDb = 12.0f; 65 66 json_t* saveToJson(json_t* root) override; 67 void loadFromJson(json_t* root) override; 68 }; 69 70 struct DimmableMixerWidget : LinearCVMixerWidget { 71 void contextMenu(Menu* menu) override; 72 }; 73 74 struct MuteButton : LightEmittingWidget<ToggleButton> { 75 MuteButton() { 76 addFrame(APP->window->loadSvg(asset::plugin(pluginInstance, "res/button_18px_0.svg"))); 77 addFrame(APP->window->loadSvg(asset::plugin(pluginInstance, "res/button_18px_1_orange.svg"))); 78 } 79 80 void onButton(const event::Button& e) override; 81 bool isLit() override; 82 void draw(const DrawArgs& args) override; 83 void drawLit(const DrawArgs& args) override; 84 }; 85 86 struct SoloMuteButton : LightEmittingWidget<ParamWidget> { 87 std::vector<std::shared_ptr<Svg>> _frames; 88 SvgWidget* _svgWidget; // deleted elsewhere. 89 CircularShadow* shadow = NULL; 90 91 SoloMuteButton(); 92 void onButton(const event::Button& e) override; 93 void onChange(const event::Change& e) override; 94 bool isLit() override; 95 void draw(const DrawArgs& args) override; 96 void drawLit(const DrawArgs& args) override; 97 }; 98 99 struct DimSwitchQuantity : SwitchQuantity { 100 std::string getDisplayValueString() override; 101 }; 102 103 } // namespace bogaudio