#include #include "../deps/SynthDevKit/src/CV.hpp" #include "DrumKit.hpp" #include "DrumModule.hpp" namespace rack_plugin_DrumKit { DrumModule::DrumModule( ) : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { cv1 = new SynthDevKit::CV(1.7f); cv2 = new SynthDevKit::CV(1.7f); currentStep1 = 0; currentStep2 = 0; ready1 = false; ready2 = false; numSamples = 0; } struct DrumContainer *DrumModule::getSample(float current) { if (numSamples == 0) { setupSamples(); } if (current < 1 || current >= numSamples) { return &samples[ 0 ]; } return &samples[ (int)current - 1 ]; } void DrumModule::step( ) { float in1 = inputs[ CLOCK1_INPUT ].value; cv1->update(in1); if (cv1->newTrigger( )) { if (!ready1) { ready1 = true; } currentStep1 = 0; } float current1 = params[ DRUM1_PARAM ].value; struct DrumContainer *c = getSample(current1); if (currentStep1 >= c->length) { outputs[ AUDIO1_OUTPUT ].value = 0; } else { outputs[ AUDIO1_OUTPUT ].value = c->sample[ currentStep1 ]; currentStep1++; } float in2 = inputs[ CLOCK2_INPUT ].value; cv2->update(in2); if (cv2->newTrigger( )) { if (!ready2) { ready2 = true; } currentStep2 = 0; } float current2 = params[ DRUM2_PARAM ].value; c = getSample(current2); if (currentStep2 >= c->length) { outputs[ AUDIO2_OUTPUT ].value = 0; } else { outputs[ AUDIO2_OUTPUT ].value = c->sample[ currentStep2 ]; currentStep2++; } } void DrumModule::setupSamples( ) { } } // namespace rack_plugin_DrumKit