You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
5.8KB

  1. #pragma once
  2. #include "NoisePlethoraPlugin.hpp"
  3. class TriFMcluster : public NoisePlethoraPlugin {
  4. public:
  5. TriFMcluster()
  6. // : patchCord1(modulator1, 0, waveform1, 0),
  7. // patchCord2(modulator3, 0, waveform3, 0),
  8. // patchCord3(modulator2, 0, waveform2, 0),
  9. // patchCord4(modulator5, 0, waveform5, 0),
  10. // patchCord5(modulator4, 0, waveform4, 0),
  11. // patchCord6(modulator6, 0, waveform6, 0),
  12. // patchCord7(waveform1, 0, mixer1, 0),
  13. // patchCord8(waveform4, 0, mixer1, 3),
  14. // patchCord9(waveform2, 0, mixer1, 1),
  15. // patchCord10(waveform3, 0, mixer1, 2),
  16. // patchCord11(waveform6, 0, mixer2, 1),
  17. // patchCord12(waveform5, 0, mixer2, 0),
  18. // patchCord13(mixer2, 0, mixer5, 1),
  19. // patchCord14(mixer1, 0, mixer5, 0)
  20. { }
  21. ~TriFMcluster() override {}
  22. TriFMcluster(const TriFMcluster&) = delete;
  23. TriFMcluster& operator=(const TriFMcluster&) = delete;
  24. void init() override {
  25. mixer1.gain(0, 1);
  26. mixer1.gain(1, 1);
  27. mixer1.gain(2, 1);
  28. mixer1.gain(3, 1);
  29. mixer2.gain(0, 1);
  30. mixer2.gain(1, 1);
  31. mixer2.gain(2, 1);
  32. mixer2.gain(3, 1);
  33. mixer5.gain(0, 1);
  34. mixer5.gain(1, 1);
  35. mixer5.gain(2, 1);
  36. mixer5.gain(3, 1);
  37. int masterWaveform = WAVEFORM_TRIANGLE;
  38. float masterVolume = 0.25;
  39. waveform1.begin(masterVolume, 794, masterWaveform);
  40. waveform2.begin(masterVolume, 647, masterWaveform);
  41. waveform3.begin(masterVolume, 524, masterWaveform);
  42. waveform4.begin(masterVolume, 444, masterWaveform);
  43. waveform5.begin(masterVolume, 368, masterWaveform);
  44. waveform6.begin(masterVolume, 283, masterWaveform);
  45. modulator1.begin(1, 1000, WAVEFORM_SINE);
  46. modulator2.begin(1, 1000, WAVEFORM_SINE);
  47. modulator3.begin(1, 1000, WAVEFORM_SINE);
  48. modulator4.begin(1, 1000, WAVEFORM_SINE);
  49. modulator5.begin(1, 1000, WAVEFORM_SINE);
  50. modulator6.begin(1, 1000, WAVEFORM_SINE);
  51. }
  52. void process(float k1, float k2) override {
  53. float knob_1 = k1;
  54. float knob_2 = k2;
  55. float pitch1 = pow(knob_1, 2);
  56. float f1 = 300 + pitch1 * 8000;
  57. float f2 = f1 * 1.227;
  58. float f3 = f2 * 1.24;
  59. float f4 = f3 * 1.17;
  60. float f5 = f4 * 1.2;
  61. float f6 = f5 * 1.3;
  62. float index = knob_2 * 0.9 + 0.1;
  63. float indexFreq = 0.07;
  64. modulator1.amplitude(index);
  65. modulator2.amplitude(index);
  66. modulator3.amplitude(index);
  67. modulator4.amplitude(index);
  68. modulator5.amplitude(index);
  69. modulator6.amplitude(index);
  70. modulator1.frequency(f1 * indexFreq);
  71. modulator2.frequency(f2 * indexFreq);
  72. modulator3.frequency(f3 * indexFreq);
  73. modulator4.frequency(f4 * indexFreq);
  74. modulator5.frequency(f5 * indexFreq);
  75. modulator6.frequency(f6 * indexFreq);
  76. waveform1.frequency(f1);
  77. waveform2.frequency(f2);
  78. waveform3.frequency(f3);
  79. waveform4.frequency(f4);
  80. waveform5.frequency(f5);
  81. waveform6.frequency(f6);
  82. }
  83. void processGraphAsBlock(TeensyBuffer& blockBuffer) override {
  84. // modulators for the 6 oscillators
  85. modulator1.update(&waveformOut[0]);
  86. modulator2.update(&waveformOut[1]);
  87. modulator3.update(&waveformOut[2]);
  88. modulator4.update(&waveformOut[3]);
  89. modulator5.update(&waveformOut[4]);
  90. modulator6.update(&waveformOut[5]);
  91. // FM for the 6 oscillators from modulators
  92. waveform1.update(&waveformOut[0], nullptr, &waveformModOut[0]);
  93. waveform2.update(&waveformOut[1], nullptr, &waveformModOut[1]);
  94. waveform3.update(&waveformOut[2], nullptr, &waveformModOut[2]);
  95. waveform4.update(&waveformOut[3], nullptr, &waveformModOut[3]);
  96. waveform5.update(&waveformOut[4], nullptr, &waveformModOut[4]);
  97. waveform6.update(&waveformOut[5], nullptr, &waveformModOut[5]);
  98. mixer1.update(&waveformModOut[0], &waveformModOut[1], &waveformModOut[2], &waveformModOut[3], &mixerOut[0]);
  99. mixer2.update(&waveformModOut[4], &waveformModOut[5], nullptr, nullptr, &mixerOut[1]);
  100. mixer5.update(&mixerOut[0], &mixerOut[1], nullptr, nullptr, &mixerOut[2]);
  101. blockBuffer.pushBuffer(mixerOut[2].data, AUDIO_BLOCK_SAMPLES);
  102. }
  103. AudioStream& getStream() override {
  104. return mixer5;
  105. }
  106. unsigned char getPort() override {
  107. return 0;
  108. }
  109. private:
  110. audio_block_t waveformOut[6] = {}, waveformModOut[6] = {}, mixerOut[3] = {};
  111. AudioSynthWaveform modulator1; //xy=236.88888549804688,262.55556869506836
  112. AudioSynthWaveform modulator3; //xy=238.88890075683594,366.555606842041
  113. AudioSynthWaveform modulator2; //xy=239.88890075683594,313.5556392669678
  114. AudioSynthWaveform modulator5; //xy=239.88890075683594,485.5555810928345
  115. AudioSynthWaveform modulator4; //xy=240.88890075683594,428.55560970306396
  116. AudioSynthWaveform modulator6; //xy=242.8888931274414,541.5555143356323
  117. AudioSynthWaveformModulated waveform1; //xy=459.88890075683594,268.6667013168335
  118. AudioSynthWaveformModulated waveform4; //xy=459.8888854980469,433.6666889190674
  119. AudioSynthWaveformModulated waveform2; //xy=461.88890838623047,322.66671657562256
  120. AudioSynthWaveformModulated waveform3; //xy=461.8888854980469,373.6666889190674
  121. AudioSynthWaveformModulated waveform6; //xy=461.88890838623047,546.6666688919067
  122. AudioSynthWaveformModulated waveform5; //xy=462.88888931274414,492.66670417785645
  123. AudioMixer4 mixer2; //xy=663.8888053894043,520.6666412353516
  124. AudioMixer4 mixer1; //xy=667.888916015625,349.6667251586914
  125. AudioMixer4 mixer5; //xy=853.8889122009277,448.6667900085449
  126. // AudioConnection patchCord1;
  127. // AudioConnection patchCord2;
  128. // AudioConnection patchCord3;
  129. // AudioConnection patchCord4;
  130. // AudioConnection patchCord5;
  131. // AudioConnection patchCord6;
  132. // AudioConnection patchCord7;
  133. // AudioConnection patchCord8;
  134. // AudioConnection patchCord9;
  135. // AudioConnection patchCord10;
  136. // AudioConnection patchCord11;
  137. // AudioConnection patchCord12;
  138. // AudioConnection patchCord13;
  139. // AudioConnection patchCord14;
  140. };
  141. REGISTER_PLUGIN(TriFMcluster);