Components and supplies
Resistor 10k ohm
4N25 OPTOCOUPLER
Arduino Nano R3
1N4148 – General Purpose Fast Switching
DIN Audio / Video Connector, 5 Contacts
Resistor 221 ohm
Breadboard (generic)
Resistor 1k ohm
Resistor 2.21k ohm
Apps and platforms
Arduino IDE
Project description
Code
SYMPLE 3 OSC POLYSYNTH WITH MIDI
c_cpp
To be uploaded to Arduino, using the IDE.
1/********************************************************************************************* 2 JCR SYMPLE 3 OSC POLYSYNTH WITH MIDI - REV.1 - By Julio Cesar - CesarSound Dec/2020 3 NOTE 23 1 B0 Note On NOTE 23 1 B0 Note Off 4 NOTE 108 1 C8 Note On NOTE 108 1 C8 Note Off 5 ----------------------------------------------------------- 6 NOTES: 7 -Connect to MIDI OUT of your MIDI controller via 5 pin DIN MIDI connector (not USB MIDI). 8 -For Arduino Uno / Nano / Pro Mini - See Schematics for wiring details. 9 -The number of tones that can be generated at the same time is limited by the number of 10 hardware timers available on the hardware (e.g. ATmega328 has 3 available timers, and the 11 ATmega1280 has 6 timers). 12**********************************************************************************************/ 13#include <MIDI.h> //MIDI I/Os for Arduino https://github.com/FortySevenEffects/arduino_midi_library 14#include <Tone.h> //Bhagman Tone Library https://github.com/bhagman/Tone 15 16byte i = 0, j = 1, k = 1; 17 18static const uint16_t note[89] = { //MIDI NOTES TO FREQUENCY ARRAY 19 NOTE_B0, NOTE_C1, NOTE_CS1, NOTE_D1, NOTE_DS1, NOTE_E1, NOTE_F1, NOTE_FS1, 20 NOTE_G1, NOTE_GS1, NOTE_A1, NOTE_AS1, NOTE_B1, NOTE_C2, NOTE_CS2, NOTE_D2, 21 NOTE_DS2, NOTE_E2, NOTE_F2, NOTE_FS2, NOTE_G2, NOTE_GS2, NOTE_A2, NOTE_AS2, 22 NOTE_B2, NOTE_C3, NOTE_CS3, NOTE_D3, NOTE_DS3, NOTE_E3, NOTE_F3, NOTE_FS3, 23 NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_AS3, NOTE_B3, NOTE_C4, NOTE_CS4, NOTE_D4, 24 NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, 25 NOTE_B4, NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, 26 NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5, NOTE_C6, NOTE_CS6, NOTE_D6, 27 NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, 28 NOTE_B6, NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, 29 NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7, NOTE_C8, NOTE_CS8, NOTE_D8, NOTE_DS8, 30}; 31 32MIDI_CREATE_DEFAULT_INSTANCE(); 33 34Tone notePlayer[3]; //[3] = 3 OSC (MAX) 35 36void setup(void) { 37 38 MIDI.begin(MIDI_CHANNEL_OMNI); 39 40 notePlayer[0].begin(3); //OSC 1 - OSC 1 OUTPUT PIN 3 41 notePlayer[1].begin(5); //OSC 2 - OSC 2 OUTPUT PIN 5 42 notePlayer[2].begin(11); //OSC 3 - OSC 3 OUTPUT PIN 11 43 44 MIDI.setHandleNoteOn(MyHandleNoteOn); 45 MIDI.setHandleNoteOff(MyHandleNoteOff); 46} 47 48void loop(void) { 49 MIDI.read(); 50} 51 52void MyHandleNoteOn(byte channel, byte pitch, byte velocity) { 53 i = pitch - 23; 54 55 j = j + 1; 56 if (j > 3) j = 1; 57 58 switch (j) { 59 case 1: 60 notePlayer[0].play(note[i]); 61 break; 62 case 2: 63 notePlayer[1].play(note[i]); 64 break; 65 case 3: 66 notePlayer[2].play(note[i]); 67 break; 68 } 69} 70 71void MyHandleNoteOff(byte channel, byte pitch, byte velocity) { 72 73 k = k + 1; 74 if (k > 3) k = 1; 75 76 switch (k) { 77 case 1: 78 notePlayer[0].stop(); 79 break; 80 case 2: 81 notePlayer[1].stop(); 82 break; 83 case 3: 84 notePlayer[2].stop(); 85 break; 86 } 87}
SYMPLE 3 OSC POLYSYNTH WITH MIDI
c_cpp
To be uploaded to Arduino, using the IDE.
1/********************************************************************************************* 2 JCR SYMPLE 3 OSC POLYSYNTH WITH MIDI - REV.1 - By Julio Cesar - CesarSound Dec/2020 3 NOTE 23 1 B0 Note On NOTE 23 1 B0 Note Off 4 NOTE 108 1 C8 Note On NOTE 108 1 C8 Note Off 5 ----------------------------------------------------------- 6 NOTES: 7 -Connect to MIDI OUT of your MIDI controller via 5 pin DIN MIDI connector (not USB MIDI). 8 -For Arduino Uno / Nano / Pro Mini - See Schematics for wiring details. 9 -The number of tones that can be generated at the same time is limited by the number of 10 hardware timers available on the hardware (e.g. ATmega328 has 3 available timers, and the 11 ATmega1280 has 6 timers). 12**********************************************************************************************/ 13#include <MIDI.h> //MIDI I/Os for Arduino https://github.com/FortySevenEffects/arduino_midi_library 14#include <Tone.h> //Bhagman Tone Library https://github.com/bhagman/Tone 15 16byte i = 0, j = 1, k = 1; 17 18static const uint16_t note[89] = { //MIDI NOTES TO FREQUENCY ARRAY 19 NOTE_B0, NOTE_C1, NOTE_CS1, NOTE_D1, NOTE_DS1, NOTE_E1, NOTE_F1, NOTE_FS1, 20 NOTE_G1, NOTE_GS1, NOTE_A1, NOTE_AS1, NOTE_B1, NOTE_C2, NOTE_CS2, NOTE_D2, 21 NOTE_DS2, NOTE_E2, NOTE_F2, NOTE_FS2, NOTE_G2, NOTE_GS2, NOTE_A2, NOTE_AS2, 22 NOTE_B2, NOTE_C3, NOTE_CS3, NOTE_D3, NOTE_DS3, NOTE_E3, NOTE_F3, NOTE_FS3, 23 NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_AS3, NOTE_B3, NOTE_C4, NOTE_CS4, NOTE_D4, 24 NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, 25 NOTE_B4, NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, 26 NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5, NOTE_C6, NOTE_CS6, NOTE_D6, 27 NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, 28 NOTE_B6, NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, 29 NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7, NOTE_C8, NOTE_CS8, NOTE_D8, NOTE_DS8, 30}; 31 32MIDI_CREATE_DEFAULT_INSTANCE(); 33 34Tone notePlayer[3]; //[3] = 3 OSC (MAX) 35 36void setup(void) { 37 38 MIDI.begin(MIDI_CHANNEL_OMNI); 39 40 notePlayer[0].begin(3); //OSC 1 - OSC 1 OUTPUT PIN 3 41 notePlayer[1].begin(5); //OSC 2 - OSC 2 OUTPUT PIN 5 42 notePlayer[2].begin(11); //OSC 3 - OSC 3 OUTPUT PIN 11 43 44 MIDI.setHandleNoteOn(MyHandleNoteOn); 45 MIDI.setHandleNoteOff(MyHandleNoteOff); 46} 47 48void loop(void) { 49 MIDI.read(); 50} 51 52void MyHandleNoteOn(byte channel, byte pitch, byte velocity) { 53 i = pitch - 23; 54 55 j = j + 1; 56 if (j > 3) j = 1; 57 58 switch (j) { 59 case 1: 60 notePlayer[0].play(note[i]); 61 break; 62 case 2: 63 notePlayer[1].play(note[i]); 64 break; 65 case 3: 66 notePlayer[2].play(note[i]); 67 break; 68 } 69} 70 71void MyHandleNoteOff(byte channel, byte pitch, byte velocity) { 72 73 k = k + 1; 74 if (k > 3) k = 1; 75 76 switch (k) { 77 case 1: 78 notePlayer[0].stop(); 79 break; 80 case 2: 81 notePlayer[1].stop(); 82 break; 83 case 3: 84 notePlayer[2].stop(); 85 break; 86 } 87}
Downloadable files
Schematics
To make the arduino electrical connection.
Schematics
Comments
Only logged in users can leave comments