#pragma once #include "NoisePlethoraPlugin.hpp" class TriFMcluster : public NoisePlethoraPlugin { public: TriFMcluster() // : patchCord1(modulator1, 0, waveform1, 0), // patchCord2(modulator3, 0, waveform3, 0), // patchCord3(modulator2, 0, waveform2, 0), // patchCord4(modulator5, 0, waveform5, 0), // patchCord5(modulator4, 0, waveform4, 0), // patchCord6(modulator6, 0, waveform6, 0), // patchCord7(waveform1, 0, mixer1, 0), // patchCord8(waveform4, 0, mixer1, 3), // patchCord9(waveform2, 0, mixer1, 1), // patchCord10(waveform3, 0, mixer1, 2), // patchCord11(waveform6, 0, mixer2, 1), // patchCord12(waveform5, 0, mixer2, 0), // patchCord13(mixer2, 0, mixer5, 1), // patchCord14(mixer1, 0, mixer5, 0) { } ~TriFMcluster() override {} TriFMcluster(const TriFMcluster&) = delete; TriFMcluster& operator=(const TriFMcluster&) = delete; void init() override { mixer1.gain(0, 1); mixer1.gain(1, 1); mixer1.gain(2, 1); mixer1.gain(3, 1); mixer2.gain(0, 1); mixer2.gain(1, 1); mixer2.gain(2, 1); mixer2.gain(3, 1); mixer5.gain(0, 1); mixer5.gain(1, 1); mixer5.gain(2, 1); mixer5.gain(3, 1); int masterWaveform = WAVEFORM_TRIANGLE; float masterVolume = 0.25; waveform1.begin(masterVolume, 794, masterWaveform); waveform2.begin(masterVolume, 647, masterWaveform); waveform3.begin(masterVolume, 524, masterWaveform); waveform4.begin(masterVolume, 444, masterWaveform); waveform5.begin(masterVolume, 368, masterWaveform); waveform6.begin(masterVolume, 283, masterWaveform); modulator1.begin(1, 1000, WAVEFORM_SINE); modulator2.begin(1, 1000, WAVEFORM_SINE); modulator3.begin(1, 1000, WAVEFORM_SINE); modulator4.begin(1, 1000, WAVEFORM_SINE); modulator5.begin(1, 1000, WAVEFORM_SINE); modulator6.begin(1, 1000, WAVEFORM_SINE); } void process(float k1, float k2) override { float knob_1 = k1; float knob_2 = k2; float pitch1 = pow(knob_1, 2); float f1 = 300 + pitch1 * 8000; float f2 = f1 * 1.227; float f3 = f2 * 1.24; float f4 = f3 * 1.17; float f5 = f4 * 1.2; float f6 = f5 * 1.3; float index = knob_2 * 0.9 + 0.1; float indexFreq = 0.07; modulator1.amplitude(index); modulator2.amplitude(index); modulator3.amplitude(index); modulator4.amplitude(index); modulator5.amplitude(index); modulator6.amplitude(index); modulator1.frequency(f1 * indexFreq); modulator2.frequency(f2 * indexFreq); modulator3.frequency(f3 * indexFreq); modulator4.frequency(f4 * indexFreq); modulator5.frequency(f5 * indexFreq); modulator6.frequency(f6 * indexFreq); waveform1.frequency(f1); waveform2.frequency(f2); waveform3.frequency(f3); waveform4.frequency(f4); waveform5.frequency(f5); waveform6.frequency(f6); } void processGraphAsBlock(TeensyBuffer& blockBuffer) override { // modulators for the 6 oscillators modulator1.update(&waveformOut[0]); modulator2.update(&waveformOut[1]); modulator3.update(&waveformOut[2]); modulator4.update(&waveformOut[3]); modulator5.update(&waveformOut[4]); modulator6.update(&waveformOut[5]); // FM for the 6 oscillators from modulators waveform1.update(&waveformOut[0], nullptr, &waveformModOut[0]); waveform2.update(&waveformOut[1], nullptr, &waveformModOut[1]); waveform3.update(&waveformOut[2], nullptr, &waveformModOut[2]); waveform4.update(&waveformOut[3], nullptr, &waveformModOut[3]); waveform5.update(&waveformOut[4], nullptr, &waveformModOut[4]); waveform6.update(&waveformOut[5], nullptr, &waveformModOut[5]); mixer1.update(&waveformModOut[0], &waveformModOut[1], &waveformModOut[2], &waveformModOut[3], &mixerOut[0]); mixer2.update(&waveformModOut[4], &waveformModOut[5], nullptr, nullptr, &mixerOut[1]); mixer5.update(&mixerOut[0], &mixerOut[1], nullptr, nullptr, &mixerOut[2]); blockBuffer.pushBuffer(mixerOut[2].data, AUDIO_BLOCK_SAMPLES); } AudioStream& getStream() override { return mixer5; } unsigned char getPort() override { return 0; } private: audio_block_t waveformOut[6] = {}, waveformModOut[6] = {}, mixerOut[3] = {}; AudioSynthWaveform modulator1; //xy=236.88888549804688,262.55556869506836 AudioSynthWaveform modulator3; //xy=238.88890075683594,366.555606842041 AudioSynthWaveform modulator2; //xy=239.88890075683594,313.5556392669678 AudioSynthWaveform modulator5; //xy=239.88890075683594,485.5555810928345 AudioSynthWaveform modulator4; //xy=240.88890075683594,428.55560970306396 AudioSynthWaveform modulator6; //xy=242.8888931274414,541.5555143356323 AudioSynthWaveformModulated waveform1; //xy=459.88890075683594,268.6667013168335 AudioSynthWaveformModulated waveform4; //xy=459.8888854980469,433.6666889190674 AudioSynthWaveformModulated waveform2; //xy=461.88890838623047,322.66671657562256 AudioSynthWaveformModulated waveform3; //xy=461.8888854980469,373.6666889190674 AudioSynthWaveformModulated waveform6; //xy=461.88890838623047,546.6666688919067 AudioSynthWaveformModulated waveform5; //xy=462.88888931274414,492.66670417785645 AudioMixer4 mixer2; //xy=663.8888053894043,520.6666412353516 AudioMixer4 mixer1; //xy=667.888916015625,349.6667251586914 AudioMixer4 mixer5; //xy=853.8889122009277,448.6667900085449 // AudioConnection patchCord1; // AudioConnection patchCord2; // AudioConnection patchCord3; // AudioConnection patchCord4; // AudioConnection patchCord5; // AudioConnection patchCord6; // AudioConnection patchCord7; // AudioConnection patchCord8; // AudioConnection patchCord9; // AudioConnection patchCord10; // AudioConnection patchCord11; // AudioConnection patchCord12; // AudioConnection patchCord13; // AudioConnection patchCord14; }; REGISTER_PLUGIN(TriFMcluster);