MIDI hangjegyüzenetek sorozatban küldése.
Utolsó felülvizsgálat: 2022.02.04 16:50
Ez az oktatóanyag bemutatja, hogyan küldhet MIDI-hangjegyeket egy Arduino kártyáról egy szabványos 5 pólusú DIN-kábellel csatlakoztatott MIDI-hangszerre.
A MIDI, a Musical Instrument Digital Interface egy hasznos protokoll szintetizátorok, szekvenszerek és más zenei eszközök vezérléséhez. A MIDI-eszközöket általában két nagy osztályba sorolják: vezérlők (azaz olyan eszközök, amelyek emberi tevékenység alapján MIDI-jeleket generálnak) és szintetizátorok (beleértve a mintavevőket, a szekvenszereket stb.). Ez utóbbiak MIDI-adatokat vesznek fel, és hangot, fényt vagy más effektust hoznak létre.
A MIDI egy soros protokoll, amely 31 250 bit/s sebességgel működik. Az alaplap beépített soros portja (a Megában is mindegyik) ilyen sebességgel képes adatot küldeni.
A MIDI bájtok két típusra oszthatók: parancsbájtokra és adatbájtokra. A parancsbájtok mindig 128 vagy nagyobbak, vagy 0x80-tól 0xFF-ig hexadecimálisan. Az adatbájtok mindig kisebbek, mint 127, vagy hexadecimálisan 0x00-0x7F. A parancsok olyan dolgokat tartalmaznak, mint például a hang be, a hang ki, a hajlítás és így tovább. Az adatbájtok közé tartoznak például a lejátszandó hang hangmagassága, a hang sebessége vagy hangossága, a hangmagasság hajlításának mértéke és így tovább. További részletekért tekintse meg a MIDI specifikációt vagy a számos MIDI Protocol Guide egyikét a weben.
A MIDI-adatokat általában hexadecimálisan jelölik, mivel a MIDI-bankok és -hangszerek 16-os csoportokba vannak csoportosítva.
További információért lásd a példákat.
Hardver szükséglet
Arduino kártya
MIDI csatlakozóaljzat
2 220 ohmos ellenállás
összekötő vezetékek
MIDI-kompatibilis eszköz (opcionális, teszteléshez)
Az áramkör
Minden MIDI csatlakozó aljzat típusú, a MIDI specifikáció értelmében. A csatlakozót a következőképpen csatlakoztathatja a kártyához:
A MIDI jack 5. érintkezője 220 ohmos ellenálláson keresztül csatlakozik az 1. digitális kivezetéshez
A MIDI jack 2. érintkezője a földeléssel van összekötve
A MIDI jack 4-es érintkezője 220 ohmos ellenálláson keresztül +5 V-ra van kötve

Vázlat

A kód
Figyelem Ha ATmega32U4 kártyát használ, mint például a DUE vagy Leonardo, kérjük, cserélje ki a Serialt Serial1-re az alábbi vázlatban.
/*
MIDI note player
Ez a vázlat bemutatja, hogyan kell használni a soros átviteli kivezetést (1. kivezetés) MIDI hangadatok küldésére.
Ha ez az áramkör MIDI szintihez van csatlakoztatva, akkor az
F#-0 (0x1E) és F#-5 (0x5A) közötti hangjegyeket sorban lejátssza.
Az áramkör:
- Digitális 1 csatlakoztatva a MIDI jack 5-ös érintkezőjéhez
- A MIDI jack 2. érintkezője a földeléssel van összekötve
- A MIDI jack 4-es érintkezője +5 V-ra csatlakozik 220 ohmos ellenálláson keresztül
- Csatlakoztasson egy MIDI kábelt a jack csatlakozóhoz, majd egy MIDI szintihez, és játsszon zenét.
created 13 Jun 2006
modified 13 Aug 2012
by Tom Igoe
Ez a kód nyilvános.
https://docs.arduino.cc/built-in-examples/communication/Midi
*/
void setup() {
// MIDI adatátviteli sebesség beállítása:
Serial.begin(31250);
}
void loop() {
// hangjegyek lejátszása F#-0-tól (0x1E) F#-5-ig (0x5A):
for (int note = 0x1E; note < 0x5A; note++) {
//Hang az 1. csatornán (0x90), valamilyen hang érték (note), közepes sebesség (0x45):
noteOn(0x90, note, 0x45);
delay(100);
//Hang az 1. csatornán (0x90), valamilyen hang érték (note), csendes sebesség (0x00):
noteOn(0x90, note, 0x00);
delay(100);
}
}
// MIDI hangot játszik le. Nem ellenőrzi, hogy a cmd nagyobb-e 127-nél, vagy hogy
// az adatértékek kisebbek-e 127-nél:
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
}
Tudj meg többet
További alapvető oktatóanyagokat a beépített példák részben talál.
Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.