Advertisement
degu234

ChordOrgan Synthvoice-case

Aug 27th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 11.80 KB | None | 0 0
  1. //todo: chord changing, waveform selection, poti hook-up
  2. //stationKnob = A9
  3. //stationCV = A8
  4. //startKnob = A7
  5. //startCV = A6
  6. //tasterButton = Pin 8
  7. //triggerCV = Pin 9
  8. //Output = dac1
  9. #include <Audio.h>
  10. #include <Wire.h>
  11. #include <SPI.h>
  12. #include <SD.h>
  13. #include <SerialFlash.h>
  14.  
  15. // GUItool: begin automatically generated code
  16. AudioSynthWaveform       waveform3;      //xy=83.75000762939453,347.0000081062317
  17. AudioSynthWaveform       waveform1;      //xy=86.7500114440918,251.0000057220459
  18. AudioSynthWaveform       waveform2;      //xy=87.75000762939453,300.0000066757202
  19. AudioSynthWaveform       waveform4;      //xy=96.75000762939453,397.00000190734863
  20. AudioEffectEnvelope      envelope1;      //xy=218.7500114440918,465.00000953674316
  21. AudioMixer4              mixer1;         //xy=259.7500114440918,324.0000057220459
  22. AudioFilterStateVariable filter1;        //xy=396.75000762939453,324.00000381469727
  23. AudioSynthWaveformDc     dc1;            //xy=475,536.25
  24. AudioFilterStateVariable filter2;        //xy=495,233
  25. AudioMixer4              mixer2;         //xy=574.5000152587891,319.00000953674316
  26. AudioEffectWaveFolder    wavefolder1;    //xy=741.25,382.5
  27. AudioEffectBitcrusher    bitcrusher1;    //xy=772.2500190734863,272.2500333786011
  28. AudioEffectDelay         delay1;         //xy=942.0001220703125,523.5000152587891
  29. AudioMixer4              mixer3;         //xy=946.0000267028809,340.0000333786011
  30. AudioFilterStateVariable filter3;        //xy=946.6000061035156,415
  31. AudioMixer4              mixer5;         //xy=1223.7500343322754,251.25000953674316
  32. AudioOutputAnalog        dac1;           //xy=1386.7500381469727,316.00000858306885
  33. AudioConnection          patchCord1(waveform3, 0, mixer1, 2);
  34. AudioConnection          patchCord2(waveform1, 0, mixer1, 0);
  35. AudioConnection          patchCord3(waveform2, 0, mixer1, 1);
  36. AudioConnection          patchCord4(waveform4, 0, mixer1, 3);
  37. AudioConnection          patchCord5(envelope1, 0, filter1, 1);
  38. AudioConnection          patchCord6(mixer1, 0, filter1, 0);
  39. AudioConnection          patchCord7(filter1, 0, filter2, 0);
  40. AudioConnection          patchCord8(dc1, 0, wavefolder1, 1);
  41. AudioConnection          patchCord9(filter2, 0, mixer2, 0);
  42. AudioConnection          patchCord10(mixer2, 0, wavefolder1, 0);
  43. AudioConnection          patchCord11(wavefolder1, bitcrusher1);
  44. AudioConnection          patchCord12(bitcrusher1, 0, mixer3, 0);
  45. AudioConnection          patchCord13(delay1, 0, filter3, 0);
  46. AudioConnection          patchCord14(mixer3, delay1);
  47. AudioConnection          patchCord15(mixer3, 0, mixer5, 0);
  48. AudioConnection          patchCord16(filter3, 0, mixer3, 1);
  49. AudioConnection          patchCord17(mixer5, dac1);
  50. AudioControlSGTL5000     sgtl5000_1;     //xy=822,662
  51. // GUItool: end automatically generated code
  52.  
  53.  
  54. //Konstanten
  55. const int tasterPin = 8;     //taster an Pin 8 angeschlossen
  56. // const int triggerPin = 9;    //Klinkenbuchse für Gate oder Trigger an Pin 9 angeschlossen
  57.  
  58. const int L1Pin = 3;       // LED1 an Pin 3 angeschlossen
  59. const int L2Pin = 4;      // LED2 an Pin 4 angeschlossen
  60. const int L3Pin = 5;      // LED3 an Pin 5 angeschlossen
  61. const int L4Pin = 6;      // LED4 an Pin 6 angeschlossen
  62.  
  63. //Variablen
  64. int mode = 0;                // Variable für die verschiedenen festgelegten Modi
  65. int tasterState = 0;         // Variable zum Speichern des Tasterstatus
  66. // int triggerState = 0;     // Variable zum Speichern des Triggerstatus
  67. float Note2[8] = {1.25992, 1.18920, 1.25992, 1.33484};  //Frequenzverhältnis erste zu zweite Note
  68. float Note3[8] = {1.49830, 1.49830, 1.49830, 1.49830};  //Frequenzverhältnis erste zu dritte Note
  69. float Note4[8] = {1.88774, 1.88774, 1.88775, 1.88775};  //Frequenzverhältnis erste zu vierte Note
  70. int noteArray[8] = {0, 1, 2, 3, 4, 5, 6, 7}; //Notenarray von dem das "NoteN"-array seine Zuordnung erhält
  71.  
  72. void setup() {
  73.   AudioMemory(200);
  74.  
  75.   waveform1.begin(WAVEFORM_SAWTOOTH);
  76.   waveform1.amplitude(0.75);
  77.   waveform1.frequency(65.41);
  78.   waveform1.pulseWidth(0.15);
  79.  
  80.   waveform2.begin(WAVEFORM_SAWTOOTH);
  81.   waveform2.amplitude(0.75);
  82.   waveform2.frequency(65.41);
  83.   waveform2.pulseWidth(0.15);
  84.  
  85.   waveform3.begin(WAVEFORM_SAWTOOTH);
  86.   waveform3.amplitude(0.75);
  87.   waveform3.frequency(65.41);
  88.   waveform3.pulseWidth(0.15);
  89.  
  90.   waveform4.begin(WAVEFORM_SAWTOOTH);
  91.   waveform4.amplitude(0.75);
  92.   waveform4.frequency(65.41);
  93.   waveform4.pulseWidth(0.15);
  94.  
  95.   mixer1.gain(0, 0.3);
  96.   mixer1.gain(1, 0.3);
  97.   mixer1.gain(2, 0.3);
  98.   mixer1.gain(3, 0.3);
  99.  
  100.   envelope1.delay(0);
  101.   envelope1.attack(20);
  102.   envelope1.hold(0);
  103.   envelope1.decay(5000);
  104.   envelope1.sustain(0.7);
  105.   envelope1.release(500);
  106.  
  107.  
  108.   filter1.frequency(16000);                                             //setze Filterfreq auf 100
  109.   filter1.resonance(0);                                               //setze Resonanz auf 0
  110.  
  111.   filter2.frequency(16000);                                             //setze Filterfreq auf 100
  112.   filter2.resonance(0);                                               //setze Resonanz auf 0
  113.  
  114.   mixer2.gain(0, 1);                                                  //setze Mixer2(Kanal, Gain) (0-3, 0-1)
  115.   mixer2.gain(1, 1);
  116.  
  117.   dc1.amplitude(0.05);                                                //dc1 für Wavefolder Input
  118.  
  119.   bitcrusher1.bits(16);
  120.   bitcrusher1.sampleRate(44100);
  121.  
  122.   delay1.delay(0, 3);                                                 //setze Delay(OutKanal, gespeicherte Samples) (0-7, 3-449*) *maximal
  123.  
  124.   filter3.frequency(4000);                                             //setze Filterfreq auf 4000
  125.   filter3.resonance(0);                                               //setze Resonanz auf 0
  126.  
  127.   mixer3.gain(0, 1);                                                 //setze Mixer2(Kanal, Gain) (0-3, 0-1)
  128.   mixer3.gain(1, 0);
  129.  
  130.   //mixer4.gain(1, 0);
  131.   //mixer4.gain(0, 0);
  132.  
  133.   mixer5.gain(0, 0.5);
  134.   //mixer5.gain(1, 0.5);
  135.  
  136.  
  137.   pinMode(tasterPin, INPUT);                                        //taster ist input
  138.   // pinMode(triggerPin, INPUT);                                        //trigger ist input
  139.   pinMode(L1Pin, OUTPUT);        // Setzt den LEDPin als Ausgang
  140.   pinMode(L2Pin, OUTPUT);      // Setzt den LEDPin als Ausgang
  141.   pinMode(L3Pin, OUTPUT);       // Setzt den LEDPin als Ausgang
  142.   pinMode(L4Pin, OUTPUT);       // Setzt den LEDPin als Ausgang
  143.  
  144.  
  145. }
  146.  
  147. void loop() {
  148.  
  149.   tasterState = digitalRead(tasterPin);                               //lies tasterPin und setze tasterState
  150.   // triggerState = digitalRead(triggerPin);                            //lies triggerPin und setze auf triggerState
  151.  
  152.   int startCV = analogRead(A8);                                         //lies Analog8 und setze auf startCV
  153.   int startKnob = analogRead(A7);                                        //lies Analog7 und setze auf startKnob
  154.   int stationKnob = analogRead(A9);                                        //lies Analog9 und setze auf stationKnob
  155.   int stationCV = analogRead(A6);                                        //lies Analog6 und setze auf stationCV
  156.  
  157.   float voltOctave = map(startCV, 0, 1023, 0, 3.3);
  158.   waveform1.frequency(((pow(2, (voltOctave)) * 55)) * 1);                            //WF1 spielt Grundton in 1V/Oktave Skala
  159.   waveform2.frequency(((pow(2, (voltOctave)) * 55)) * Note2[0]);                     //WF2 spielt Grundton * Frequenzverhältnis aus "Note2"-array
  160.   waveform3.frequency(((pow(2, (voltOctave)) * 55)) * Note3[0]);                    //  WF3 spielt Grundton * Frequenzverhältnis aus "Note3"-array
  161.   waveform4.frequency(((pow(2, (voltOctave)) * 55)) * Note4[0]);                    //  WF4 spielt Grundton * Frequenzverhältnis aus "Note4"-array
  162.  
  163.  
  164.   int cutoff = map(stationCV, 0, 1023, 65.41, 8184);                    //mappe Poti zu cutoff
  165.   filter1.frequency(cutoff);                                              //Filter1 filtert cutoff
  166.  
  167.   if (tasterState == HIGH)                                                //wenn tasterState ist High
  168.   {
  169.     mode++;                                                             //zähle mode + 1
  170.     delay(200);                                                         //delay zur Entprellung
  171.   }
  172.  
  173.   //==========================================================================
  174.  
  175.   switch (mode) {
  176.     case 0: //Filter5 + Resonance
  177.       digitalWrite(L1Pin, LOW);                                               //Led 1 aus
  178.       digitalWrite(L2Pin, LOW);                                               //Led 2 aus
  179.       digitalWrite(L3Pin, LOW);                                               //Led 3 aus
  180.       digitalWrite(L4Pin, LOW);                                               //Led 4 aus
  181.  
  182.  
  183.       //int cutoff2 = map(stationKnob, 0, 1023, 65.41, 8184);                    //mappe Poti zu cutoff2
  184.       filter2.frequency((float)map(stationKnob, 0, 1023, 65.41, 8184));                                              //Filter1 filtert cutoff
  185.       filter2.resonance((float)map(startKnob, 0, 1023, 0, 5));                          //steuert Resonanz
  186.       break;
  187.  
  188.     case 1: //Volume1 + 2,3,4
  189.       digitalWrite(L1Pin, HIGH);                                              //Led 1 an
  190.       digitalWrite(L2Pin, LOW);                                               //Led 2 aus
  191.       digitalWrite(L3Pin, LOW);                                               //Led 3 aus
  192.       digitalWrite(L4Pin, LOW);                                               //Led 4 aus
  193.  
  194.       mixer1.gain(0, ((float)stationKnob / 3069));                            //Lautstärke Mixer5 Eingang 0
  195.       mixer1.gain(1, ((float)startKnob / 3069));                            //Lautstärke Mixer1 Eingang 0
  196.       mixer1.gain(2, ((float)startKnob / 3069));                            //Lautstärke Mixer1 Eingang 0
  197.       mixer1.gain(3, ((float)startKnob / 3069));                            //Lautstärke Mixer1 Eingang 0
  198.       break;
  199.  
  200.     case 2: //Chord
  201.       digitalWrite(L1Pin, LOW);                                               //Led 1 aus
  202.       digitalWrite(L2Pin, HIGH);                                              //Led 2 an
  203.       digitalWrite(L3Pin, LOW);                                               //Led 3 aus
  204.       digitalWrite(L4Pin, LOW);                                               //Led 4 aus
  205.       //int noteArray[map(stationKnob, 0, 1023, 0, 7)];                       //stationKnob trägt Wert zwischen 0-7 ins noteArray ein
  206.       break;
  207.  
  208.     case 3: //wavefolder + bitcrusher
  209.       digitalWrite(L1Pin, LOW);
  210.       digitalWrite(L2Pin, LOW);
  211.       digitalWrite(L3Pin, HIGH);
  212.       digitalWrite(L4Pin, LOW);
  213.       dc1.amplitude((float) stationKnob / 1023);
  214.  
  215.       //int rateKnob = map(startKnob, 0, 1023, 1, 44100);
  216.       bitcrusher1.sampleRate((startKnob) * 43);
  217.       break;
  218.  
  219.     case 4: //delaytime + feedback
  220.       digitalWrite(L1Pin, LOW);
  221.       digitalWrite(L2Pin, LOW);
  222.       digitalWrite(L3Pin, LOW);
  223.       digitalWrite(L4Pin, HIGH);
  224.       //float timeKnob = map(stationKnob, 0, 1023, 3, 200);
  225.       delay1.delay(0, (stationKnob) * 0.195);
  226.       mixer3.gain(1, ((float)startKnob / 1023));
  227.       break;
  228.  
  229.     default:
  230.       mode = 0;
  231.   }
  232.  
  233.  
  234.   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  235.   //waveform2.frequency((float)(65.4064 * pow(2, (startCV)) * Note2[noteArray]));                     //WF2 spielt Grundton * Frequenzverhältnis aus "Note2"-array
  236.   //waveform3.frequency((float)(65.4064 * pow(2, (startCV)) * Note3[noteArray]));                    //  WF3 spielt Grundton * Frequenzverhältnis aus "Note3"-array
  237.   //waveform4.frequency((float)(65.4064 * pow(2, (startCV)) * Note4[noteArray]));                    //  WF4 spielt Grundton * Frequenzverhältnis aus "Note4"-array
  238.  
  239.   //Fehlermeldung: invalid types 'float [8][int [8]]' for array subscript
  240.   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement