BogaudioModules

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

Mono.hpp (1221B)


      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 extern Model* modelMono;
     10 
     11 namespace bogaudio {
     12 
     13 struct Mono : BGModule {
     14 	enum ParamsIds {
     15 		COMPRESSION_PARAM,
     16 		LEVEL_PARAM,
     17 		NUM_PARAMS
     18 	};
     19 
     20 	enum InputsIds {
     21 		POLY_INPUT,
     22 		NUM_INPUTS
     23 	};
     24 
     25 	enum OutputsIds {
     26 		MONO_OUTPUT,
     27 		NUM_OUTPUTS
     28 	};
     29 
     30 	RootMeanSquare _channelRMSs[maxChannels];
     31 	float _channelLevels[maxChannels] {};
     32 	RootMeanSquare _detectorRMS;
     33 	bogaudio::dsp::SlewLimiter _attackSL, _releaseSL;
     34 	Compressor _compressor;
     35 	Amplifier _compAmp, _levelAmp;
     36 	Saturator _saturator;
     37 	int _activeChannels = 0;
     38 	float _ratio = 2.0f;
     39 	float _releaseMS = 200.0f;
     40 	float _lastEnv = 0.0f;
     41 	float _compressionDb = 0.0f;
     42 
     43 	Mono() {
     44 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
     45 		configParam(COMPRESSION_PARAM, 0.0f, 1.0f, 0.2f, "Compression", "", 0.0f, 10.0f);
     46 		configParam<AmplifierParamQuantity>(LEVEL_PARAM, 0.0f, 1.0f, 1.0f, "Output level");
     47 
     48 		configInput(POLY_INPUT, "Polyphonic signal");
     49 
     50 		configOutput(MONO_OUTPUT, "Mono signal");
     51 	}
     52 
     53 	void sampleRateChange() override;
     54 	void modulate() override;
     55 	void processAll(const ProcessArgs& args) override;
     56 };
     57 
     58 } // namespace bogaudio