mixer_expander.cpp (1600B)
1 2 #include "mixer_expander.hpp" 3 4 void MixerExpanderChannel::setSampleRate(float sampleRate) { 5 _sendASL.setParams(sampleRate, MixerChannel::levelSlewTimeMS, MixerChannel::maxDecibels - MixerChannel::minDecibels); 6 _sendBSL.setParams(sampleRate, MixerChannel::levelSlewTimeMS, MixerChannel::maxDecibels - MixerChannel::minDecibels); 7 } 8 9 float MixerExpanderChannel::knobToDb(Param& p) { 10 float v = clamp(p.getValue(), -1.0f, 1.0f); 11 if (v < 0.0f) { 12 return -v * Equalizer::cutDb; 13 } 14 return v * Equalizer::gainDb; 15 } 16 17 void MixerExpanderChannel::modulate() { 18 _eq.setParams( 19 APP->engine->getSampleRate(), 20 knobToDb(_lowParam), 21 knobToDb(_midParam), 22 knobToDb(_highParam) 23 ); 24 } 25 26 void MixerExpanderChannel::next(float preFader, float postFader, bool sendAActive, bool sendBActive) { 27 postEQ = _eq.next(postFader); 28 29 if (sendAActive) { 30 float level = clamp(_sendAParam.getValue(), 0.0f, 1.0f); 31 if (_sendAInput.isConnected()) { 32 level *= clamp(_sendAInput.getVoltage() / 10.0f, 0.0f, 1.0f); 33 } 34 level = 1.0f - level; 35 level *= Amplifier::minDecibels; 36 _sendAAmp.setLevel(_sendASL.next(level)); 37 sendA = _sendAAmp.next(_preAParam.getValue() > 0.5f ? preFader : postEQ); 38 } 39 else { 40 sendA = 0.0f; 41 } 42 43 if (sendBActive) { 44 float level = clamp(_sendBParam.getValue(), 0.0f, 1.0f); 45 if (_sendBInput.isConnected()) { 46 level *= clamp(_sendBInput.getVoltage() / 10.0f, 0.0f, 1.0f); 47 } 48 level = 1.0f - level; 49 level *= Amplifier::minDecibels; 50 _sendBAmp.setLevel(_sendBSL.next(level)); 51 sendB = _sendBAmp.next(_preBParam.getValue() > 0.5f ? preFader : postEQ); 52 } 53 else { 54 sendB = 0.0f; 55 } 56 }