Advertisement
Guest User

Untitled

a guest
May 29th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.76 KB | None | 0 0
  1. #include <Audio.h>
  2. #include <Wire.h>
  3. #include <SPI.h>
  4. #include <SD.h>
  5. #include <SerialFlash.h>
  6.  
  7. // GUItool: begin automatically generated code
  8. AudioSynthWaveform       waveform3;      //xy=284,1255
  9. AudioSynthWaveform       waveform1;      //xy=288,1103
  10. AudioSynthWaveform       waveform4;      //xy=289,1320
  11. AudioSynthWaveform       waveform2;      //xy=290,1153
  12. AudioFilterStateVariable filter1;        //xy=475,1289
  13. AudioFilterStateVariable filter2; //xy=477,1239
  14. AudioFilterStateVariable filter4; //xy=479,1139
  15. AudioFilterStateVariable filter3; //xy=479,1188
  16. AudioMixer4              mixer1;         //xy=802,1208
  17. AudioOutputI2S           i2s1;           //xy=1263,1210
  18. AudioConnection          patchCord1(waveform3, 0, filter2, 0);
  19. AudioConnection          patchCord2(waveform1, 0, filter4, 0);
  20. AudioConnection          patchCord3(waveform4, 0, filter1, 0);
  21. AudioConnection          patchCord4(waveform2, 0, filter3, 0);
  22. AudioConnection          patchCord5(filter1, 0, mixer1, 3);
  23. AudioConnection          patchCord6(filter2, 0, mixer1, 2);
  24. AudioConnection          patchCord7(filter4, 0, mixer1, 0);
  25. AudioConnection          patchCord8(filter3, 0, mixer1, 1);
  26. AudioConnection          patchCord9(mixer1, 0, i2s1, 0);
  27. AudioConnection          patchCord10(mixer1, 0, i2s1, 1);
  28. AudioControlSGTL5000     sgtl5000_1;     //xy=1255,1166
  29. // GUItool: end automatically generated code
  30.  
  31.  
  32.  
  33.  
  34. //globals
  35.  
  36. //buffer stuff
  37. byte noteBuffer[24];
  38. byte velocityBuffer[24];
  39. int bufferLen = 0;
  40. int bufferMaxLen = 24;
  41. const float noteFreqs[128] = {8.176, 8.662, 9.177, 9.723, 10.301, 10.913, 11.562, 12.25, 12.978, 13.75, 14.568, 15.434, 16.352, 17.324, 18.354, 19.445, 20.602, 21.827, 23.125, 24.5, 25.957, 27.5, 29.135, 30.868, 32.703, 34.648, 36.708, 38.891, 41.203, 43.654, 46.249, 48.999, 51.913, 55, 58.27, 61.735, 65.406, 69.296, 73.416, 77.782, 82.407, 87.307, 92.499, 97.999, 103.826, 110, 116.541, 123.471, 130.813, 138.591, 146.832, 155.563, 164.814, 174.614, 184.997, 195.998, 207.652, 220, 233.082, 246.942, 261.626, 277.183, 293.665, 311.127, 329.628, 349.228, 369.994, 391.995, 415.305, 440, 466.164, 493.883, 523.251, 554.365, 587.33, 622.254, 659.255, 698.456, 739.989, 783.991, 830.609, 880, 932.328, 987.767, 1046.502, 1108.731, 1174.659, 1244.508, 1318.51, 1396.913, 1479.978, 1567.982, 1661.219, 1760, 1864.655, 1975.533, 2093.005, 2217.461, 2349.318, 2489.016, 2637.02, 2793.826, 2959.955, 3135.963, 3322.438, 3520, 3729.31, 3951.066, 4186.009, 4434.922, 4698.636, 4978.032, 5274.041, 5587.652, 5919.911, 6271.927, 6644.875, 7040, 7458.62, 7902.133, 8372.018, 8869.844, 9397.273, 9956.063, 10548.08, 11175.3, 11839.82, 12543.85};
  42.  
  43. //for avoiding division
  44. const float div127 = (1.0 / 127.0);
  45.  
  46. //waveform type 1
  47. int waveformType = WAVEFORM_SAWTOOTH;
  48. float waveformAmplitude = 0.5;
  49. float waveformPulseWidth = 0.15;
  50.  
  51. //filter
  52. float filterFrequency = (0.1 * 10000);
  53. float filterResonance = (0.8 * 4.3);
  54.  
  55.  
  56.  
  57.  
  58. void setup() {
  59.   //main setup
  60.   AudioMemory(128);
  61.   usbMIDI.setHandleNoteOff(myNoteOff);
  62.   usbMIDI.setHandleNoteOn(myNoteOn);
  63.   sgtl5000_1.enable();
  64.   sgtl5000_1.volume(0.5);
  65.   mixer1.gain(0,0.1);
  66.   mixer1.gain(1,0.1);
  67.   mixer1.gain(2,0.1);
  68.   mixer1.gain(3,0.1);
  69.  
  70.   //initialize oscilators
  71.   waveform1.begin(waveformType);
  72.   waveform1.frequency(440);
  73.   waveform1.amplitude(0.5);
  74.   waveform1.pulseWidth(waveformPulseWidth);
  75.  
  76.   waveform2.begin(waveformType);
  77.   waveform2.frequency(0);
  78.   waveform2.amplitude(0);
  79.   waveform2.pulseWidth(waveformPulseWidth);
  80.  
  81.   waveform3.begin(waveformType);
  82.   waveform3.frequency(0);
  83.   waveform3.amplitude(0);
  84.   waveform3.pulseWidth(waveformPulseWidth);
  85.  
  86.   waveform4.begin(waveformType);
  87.   waveform4.frequency(0);
  88.   waveform4.amplitude(0);
  89.   waveform4.pulseWidth(waveformPulseWidth);
  90.  
  91. }
  92.  
  93. void loop()
  94. {
  95.   usbMIDI.read();
  96.   filter1.frequency(filterFrequency);
  97.   filter1.resonance(filterResonance);
  98.   filter2.frequency(filterFrequency);
  99.   filter2.resonance(filterResonance);
  100.   filter3.frequency(filterFrequency);
  101.   filter3.resonance(filterResonance);
  102.   filter4.frequency(filterFrequency);
  103.   filter4.resonance(filterResonance);
  104. }
  105.  
  106.  
  107.  
  108. //called whenever a note is pressed down
  109. void myNoteOn(byte channel,byte note, byte velocity)
  110. {
  111.   BufferHandler(note,velocity,true);
  112.  
  113. }
  114.  
  115.  
  116. //called whenever a note is taken off
  117. void myNoteOff(byte channel,byte note, byte velocity)
  118. {
  119.   BufferHandler(note,velocity,false);
  120. }
  121.  
  122.  
  123.  
  124. void BufferHandler(byte note, byte velocity, bool playNote)
  125. {
  126.   int notePos = 0;
  127.   if(playNote == true && bufferLen < bufferMaxLen)
  128.   {
  129.     noteBuffer[bufferLen] = note;
  130.     velocityBuffer[bufferLen] = velocity;
  131.    
  132.     bufferLen++;
  133.   }
  134.  
  135.   else if(playNote == false && bufferLen < bufferMaxLen)
  136.   {
  137.     for (int i=0; i<bufferLen; i++)//finds the note in the buffer
  138.     {
  139.       if(note == noteBuffer[i])
  140.       {
  141.         notePos =  i;
  142.         break;
  143.       }
  144.     }
  145.    
  146.     for(int i=notePos; i<bufferLen; i++)//removes the note and budges everything along
  147.     {
  148.       noteBuffer[i] = noteBuffer[i+1];
  149.       velocityBuffer[i] = velocityBuffer[i+1];
  150.     }
  151.  
  152.     bufferLen--;
  153.    
  154.   }
  155.   oscManager();
  156.  
  157. }
  158.  
  159. void oscManager()
  160. {
  161.   AudioNoInterrupts();
  162.  
  163.   waveform1.frequency(noteFreqs[noteBuffer[bufferLen - 1]]);
  164.   waveform2.frequency(noteFreqs[noteBuffer[bufferLen - 2]]);
  165.   waveform3.frequency(noteFreqs[noteBuffer[bufferLen - 3]]);
  166.   waveform4.frequency(noteFreqs[noteBuffer[bufferLen - 4]]);
  167.   waveform1.amplitude(((velocityBuffer[bufferLen - 1]) * div127) * waveformAmplitude);
  168.   waveform2.amplitude(((velocityBuffer[bufferLen - 2]) * div127) * waveformAmplitude);
  169.   waveform3.amplitude(((velocityBuffer[bufferLen - 3]) * div127) * waveformAmplitude);
  170.   waveform4.amplitude(((velocityBuffer[bufferLen - 4]) * div127) * waveformAmplitude);
  171.  
  172.   AudioInterrupts();
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement