Wkraczamy w świat dźwięków. Wysyłanie nut przez MIDI.

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.

MIDI_female_conector_yar

Łączenie z Arduino:

Nóżka DIN5 przez rezystor z TX
Nóżka DIN2 do GND
Nóżka DIN4 przez rezystor z +5V

MIDI_out_breadboard

Schemat:
MIDI_out_schemat

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

}

Dodaj komentarz