MIDI hanglejátszó

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.