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);}
}



