BogaudioModules

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

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