BogaudioModules

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

FlipFlop.hpp (1318B)


      1 #pragma once
      2 
      3 #include "bogaudio.hpp"
      4 #include "dsp/signal.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 
      8 extern Model* modelFlipFlop;
      9 
     10 namespace bogaudio {
     11 
     12 struct FlipFlop : BGModule {
     13 	enum ParamsIds {
     14 		NUM_PARAMS
     15 	};
     16 
     17 	enum InputsIds {
     18 		IN1_INPUT,
     19 		RESET1_INPUT,
     20 		IN2_INPUT,
     21 		RESET2_INPUT,
     22 		NUM_INPUTS
     23 	};
     24 
     25 	enum OutputsIds {
     26 		A1_OUTPUT,
     27 		B1_OUTPUT,
     28 		A2_OUTPUT,
     29 		B2_OUTPUT,
     30 		NUM_OUTPUTS
     31 	};
     32 
     33 	bool _flipped1[maxChannels] {};
     34 	bool _flipped2[maxChannels] {};
     35 	PositiveZeroCrossing _trigger1[maxChannels];
     36 	Trigger _resetTrigger1[maxChannels];
     37 	PositiveZeroCrossing _trigger2[maxChannels];
     38 	Trigger _resetTrigger2[maxChannels];
     39 
     40 	FlipFlop() {
     41 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS);
     42 
     43 		configInput(IN1_INPUT, "Trigger 1");
     44 		configInput(RESET1_INPUT, "Reset 1");
     45 		configInput(IN2_INPUT, "Trigger 2");
     46 		configInput(RESET2_INPUT, "Reset 2");
     47 
     48 		configOutput(A1_OUTPUT, "A1 gate");
     49 		configOutput(B1_OUTPUT, "B1 gate");
     50 		configOutput(A2_OUTPUT, "A2 gate");
     51 		configOutput(B2_OUTPUT, "B2 gate");
     52 	}
     53 
     54 	void reset() override;
     55 	void processAll(const ProcessArgs& args) override;
     56 	void channelStep(
     57 		int c,
     58 		int channels,
     59 		Input& triggerInput,
     60 		Input& resetInput,
     61 		Output& aOutput,
     62 		Output& bOutput,
     63 		PositiveZeroCrossing* trigger,
     64 		Trigger* resetTrigger,
     65 		bool* flipped
     66 	);
     67 };
     68 
     69 } // namespace bogaudio