Na początek kilka słów z Wikipedii:
MIDI (skrót od Musical Instrument Digital Interface, z ang. „cyfrowy interfejs instrumentów muzycznych”) – system, (interfejs, oprogramowanie i zestaw komend) służący do przekazywania informacji pomiędzy elektronicznymi instrumentami muzycznymi.
MIDI umożliwia komputerom, syntezatorom, keyboardom, kartom dźwiękowym i podobnym urządzeniom kontrolować się nawzajem oraz wymieniać informacje między sobą. Pozwoliło także na tworzenie łatwych w obsłudze i programowaniu sekwencerów i syntezatorów perkusyjnych.
Na początek podłączamy nasz syntezator przez MIDI do Arduino i zmuszamy do zagrania dwóch nut, w równych odstępach czasu.
Bardzo ważne jest właściwe podłączenie przewodów do gniazda DIN5. Poniższy rysunek pomoże właściwie przylutować kabelki. Zdjęcie pokazuje widok gniazda z tyłu oraz wtyczki z przodu.
Łączenie z Arduino:
Nóżka DIN5 przez rezystor z TX
Nóżka DIN2 do GND
Nóżka DIN4 przez rezystor z +5V
Kod1 (wysyłanie czystej kwarty):
#include <MIDI.h> // Simple tutorial on how to send MIDI messages. // Arduino will blink a led and play two notes. MIDI_CREATE_DEFAULT_INSTANCE(); #define LED 13 void setup() { pinMode(LED, OUTPUT); MIDI.begin(MIDI_CHANNEL_OFF); // Launch MIDI and tells program to disregard any MIDI incoming messages } void loop() { digitalWrite(LED,HIGH); MIDI.sendNoteOn(60,127,1); // Send a Note (pitch 60 (middle C), velo 127 on channel 1) MIDI.sendNoteOn(65,127,1); // Send a Note (pitch 65 (F), velo 127 on channel 1) delay(200); MIDI.sendNoteOff(60,0,1); // Stop the notes MIDI.sendNoteOff(65,0,1); digitalWrite(LED,LOW); delay(100); }
Kod2 (dźwięki randomimiczne)
#include <MIDI.h></pre> // DX7 INT 27 MIDI_CREATE_DEFAULT_INSTANCE(); #define LED 13 #define progNumber 27 //definiujemy numer programu int nuta; int vel; int przypadek; int przypadek2; int Dx7Preset[] = {1, 2, 3, 5, 7, 27}; void setup() { vel=31; pinMode(LED, OUTPUT); MIDI.begin(MIDI_CHANNEL_OFF); // Launch MIDI and tells program to disregard any MIDI incoming messages //Serial.begin(19200); MIDI.sendProgramChange(progNumber-1,1); } void loop() { for (int nuta = 122; nuta > 1; nuta --){ przypadek = random(1,120); if ((nuta%(przypadek/5))==0) //w przypadku gdy dzielenie nuty przez random/5 daje 0 zmień program { przypadek2 = random(0,5); MIDI.sendProgramChange(Dx7Preset[przypadek2]-1,1); //zmiana programu według przypadkowo wybranego preseta z tablicy } //vel=vel+(przypadek/5); // randomizacja velocity digitalWrite(LED,HIGH); MIDI.sendNoteOn(nuta,vel,1); MIDI.sendNoteOn(nuta+przypadek,vel,1); MIDI.sendNoteOn(nuta+5+przypadek,vel,1); delay(100); MIDI.sendNoteOff(nuta,vel,1); MIDI.sendNoteOff(nuta+przypadek,vel,1); MIDI.sendNoteOff(nuta+5+przypadek,vel,1); digitalWrite(LED,LOW); delay(20);} }