BogaudioModules

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

Mix1.cpp (2381B)


      1 
      2 #include "Mix1.hpp"
      3 
      4 void Mix1::sampleRateChange() {
      5 	float sr = APP->engine->getSampleRate();
      6 	for (int c = 0; c < _channels; ++c) {
      7 		_engines[c]->setSampleRate(sr);
      8 	}
      9 }
     10 
     11 bool Mix1::active() {
     12 	return outputs[OUT_OUTPUT].isConnected();
     13 }
     14 
     15 int Mix1::channels() {
     16 	return inputs[IN_INPUT].getChannels();
     17 }
     18 
     19 void Mix1::addChannel(int c) {
     20 	_engines[c] = new MixerChannel(
     21 		params[LEVEL_PARAM],
     22 		params[MUTE_PARAM],
     23 		inputs[LEVEL_INPUT],
     24 		1000.0f,
     25 		&inputs[MUTE_INPUT]
     26 	);
     27 	_engines[c]->setSampleRate(APP->engine->getSampleRate());
     28 }
     29 
     30 void Mix1::removeChannel(int c) {
     31 	delete _engines[c];
     32 	_engines[c] = NULL;
     33 }
     34 
     35 void Mix1::processAlways(const ProcessArgs& args) {
     36 	_rmsSum = 0.0f;
     37 }
     38 
     39 void Mix1::processChannel(const ProcessArgs& args, int c) {
     40 	MixerChannel& e = *_engines[c];
     41 	e.next(inputs[IN_INPUT].getVoltage(c), false, c, _linearCV);
     42 	_rmsSum += e.rms;
     43 	outputs[OUT_OUTPUT].setChannels(_channels);
     44 	outputs[OUT_OUTPUT].setVoltage(e.out, c);
     45 }
     46 
     47 void Mix1::postProcessAlways(const ProcessArgs& args) {
     48 	_rms = _rmsSum * _inverseChannels;
     49 }
     50 
     51 struct Mix1Widget : LinearCVMixerWidget {
     52 	static constexpr int hp = 3;
     53 
     54 	Mix1Widget(Mix1* module) {
     55 		setModule(module);
     56 		box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
     57 		setPanel(box.size, "Mix1");
     58 		createScrews();
     59 
     60 		// generated by svg_widgets.rb
     61 		auto levelParamPosition = Vec(13.5, 18.0);
     62 		auto muteParamPosition = Vec(13.5, 176.0);
     63 
     64 		auto muteInputPosition = Vec(10.5, 198.0);
     65 		auto levelInputPosition = Vec(10.5, 233.0);
     66 		auto inInputPosition = Vec(10.5, 268.0);
     67 
     68 		auto outOutputPosition = Vec(10.5, 306.0);
     69 		// end generated by svg_widgets.rb
     70 
     71 		{
     72 			auto slider = createParam<VUSlider151>(levelParamPosition, module, Mix1::LEVEL_PARAM);
     73 			if (module) {
     74 				dynamic_cast<VUSlider*>(slider)->setVULevel(&module->_rms);
     75 			}
     76 			addParam(slider);
     77 		}
     78 		addParam(createParam<MuteButton>(muteParamPosition, module, Mix1::MUTE_PARAM));
     79 
     80 		addInput(createInput<Port24>(muteInputPosition, module, Mix1::MUTE_INPUT));
     81 		addInput(createInput<Port24>(levelInputPosition, module, Mix1::LEVEL_INPUT));
     82 		addInput(createInput<Port24>(inInputPosition, module, Mix1::IN_INPUT));
     83 
     84 		addOutput(createOutput<Port24>(outOutputPosition, module, Mix1::OUT_OUTPUT));
     85 	}
     86 };
     87 
     88 Model* modelMix1 = bogaudio::createModel<Mix1, Mix1Widget>("Bogaudio-Mix1", "MIX1", "Fader/amplifier with CV-controllable mute", "VCA", "Polyphonic");