BogaudioModules

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

Matrix44.cpp (3924B)


      1 
      2 #include "Matrix44.hpp"
      3 
      4 void Matrix44::elementsChanged() {
      5 	// base-class caller holds lock on _elements.
      6 	Input** cvs = NULL;
      7 	Param** mutes = NULL;
      8 	bool* soloByColumns = NULL;
      9 	if (_elements.size() > 1) {
     10 		auto e = _elements[1];
     11 		assert(e);
     12 		if (e->cvs) {
     13 			cvs = e->cvs;
     14 		}
     15 		if (e->mutes) {
     16 			mutes = e->mutes;
     17 		}
     18 		if (e->soloByColumns) {
     19 			soloByColumns = e->soloByColumns;
     20 		}
     21 	}
     22 	setCVInputs(cvs);
     23 	setMuteParams(mutes);
     24 	setSoloByColumns(soloByColumns);
     25 }
     26 
     27 void Matrix44::processAlways(const ProcessArgs& args) {
     28 	if (expanderConnected()) {
     29 		Matrix44ExpanderMessage* te = toExpander();
     30 		te->baseID = _id;
     31 		te->position = 1;
     32 	}
     33 }
     34 
     35 struct Matrix44Widget : KnobMatrixModuleWidget {
     36 	static constexpr int hp = 10;
     37 
     38 	Matrix44Widget(Matrix44* module) {
     39 		setModule(module);
     40 		box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
     41 		setPanel(box.size, "Matrix44");
     42 		createScrews();
     43 
     44 		// generated by svg_widgets.rb
     45 		auto mix11ParamPosition = Vec(17.2, 58.7);
     46 		auto mix21ParamPosition = Vec(17.2, 115.2);
     47 		auto mix31ParamPosition = Vec(17.2, 171.2);
     48 		auto mix41ParamPosition = Vec(17.2, 227.2);
     49 		auto mix12ParamPosition = Vec(49.2, 58.7);
     50 		auto mix22ParamPosition = Vec(49.2, 115.2);
     51 		auto mix32ParamPosition = Vec(49.2, 171.2);
     52 		auto mix42ParamPosition = Vec(49.2, 227.2);
     53 		auto mix13ParamPosition = Vec(81.2, 58.7);
     54 		auto mix23ParamPosition = Vec(81.2, 115.2);
     55 		auto mix33ParamPosition = Vec(81.2, 171.2);
     56 		auto mix43ParamPosition = Vec(81.2, 227.2);
     57 		auto mix14ParamPosition = Vec(113.2, 58.7);
     58 		auto mix24ParamPosition = Vec(113.2, 115.2);
     59 		auto mix34ParamPosition = Vec(113.2, 171.2);
     60 		auto mix44ParamPosition = Vec(113.2, 227.2);
     61 
     62 		auto in1InputPosition = Vec(15.0, 274.0);
     63 		auto in2InputPosition = Vec(47.0, 274.0);
     64 		auto in3InputPosition = Vec(79.0, 274.0);
     65 		auto in4InputPosition = Vec(111.0, 274.0);
     66 
     67 		auto out1OutputPosition = Vec(15.0, 318.0);
     68 		auto out2OutputPosition = Vec(47.0, 318.0);
     69 		auto out3OutputPosition = Vec(79.0, 318.0);
     70 		auto out4OutputPosition = Vec(111.0, 318.0);
     71 		// end generated by svg_widgets.rb
     72 
     73 		createKnob(mix11ParamPosition, module, Matrix44::MIX11_PARAM);
     74 		createKnob(mix21ParamPosition, module, Matrix44::MIX21_PARAM);
     75 		createKnob(mix31ParamPosition, module, Matrix44::MIX31_PARAM);
     76 		createKnob(mix41ParamPosition, module, Matrix44::MIX41_PARAM);
     77 		createKnob(mix12ParamPosition, module, Matrix44::MIX12_PARAM);
     78 		createKnob(mix22ParamPosition, module, Matrix44::MIX22_PARAM);
     79 		createKnob(mix32ParamPosition, module, Matrix44::MIX32_PARAM);
     80 		createKnob(mix42ParamPosition, module, Matrix44::MIX42_PARAM);
     81 		createKnob(mix13ParamPosition, module, Matrix44::MIX13_PARAM);
     82 		createKnob(mix23ParamPosition, module, Matrix44::MIX23_PARAM);
     83 		createKnob(mix33ParamPosition, module, Matrix44::MIX33_PARAM);
     84 		createKnob(mix43ParamPosition, module, Matrix44::MIX43_PARAM);
     85 		createKnob(mix14ParamPosition, module, Matrix44::MIX14_PARAM);
     86 		createKnob(mix24ParamPosition, module, Matrix44::MIX24_PARAM);
     87 		createKnob(mix34ParamPosition, module, Matrix44::MIX34_PARAM);
     88 		createKnob(mix44ParamPosition, module, Matrix44::MIX44_PARAM);
     89 
     90 		addInput(createInput<Port24>(in1InputPosition, module, Matrix44::IN1_INPUT));
     91 		addInput(createInput<Port24>(in2InputPosition, module, Matrix44::IN2_INPUT));
     92 		addInput(createInput<Port24>(in3InputPosition, module, Matrix44::IN3_INPUT));
     93 		addInput(createInput<Port24>(in4InputPosition, module, Matrix44::IN4_INPUT));
     94 
     95 		addOutput(createOutput<Port24>(out1OutputPosition, module, Matrix44::OUT1_OUTPUT));
     96 		addOutput(createOutput<Port24>(out2OutputPosition, module, Matrix44::OUT2_OUTPUT));
     97 		addOutput(createOutput<Port24>(out3OutputPosition, module, Matrix44::OUT3_OUTPUT));
     98 		addOutput(createOutput<Port24>(out4OutputPosition, module, Matrix44::OUT4_OUTPUT));
     99 	}
    100 };
    101 
    102 Model* modelMatrix44 = createModel<Matrix44, Matrix44Widget>("Bogaudio-Matrix44", "MATRIX44", "4x4 matrix mixer", "Mixer", "Polyphonic");