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