BogaudioModules

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

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 }