Midi

Bu eğitici, Arduino veya Genuino kartından MIDI notlarının standart 5 kutuplu DIN kablosu ile bağlı bir MIDI cihazına nasıl gönderileceğini gösterir.

Müzik Enstrümanı Dijital Arayüzü olan MIDI , sentezleyicileri, sıralayıcıları ve diğer müzik cihazlarını kontrol etmek için yararlı bir protokoldür. MIDI cihazları genellikle iki geniş sınıfa ayrılır: kontrolörler (yani insan eylemlerine dayalı MIDI sinyalleri üreten cihazlar) ve sentezleyiciler (örnekleyiciler, sıralayıcılar vb. Dahil). İkincisi MIDI verilerini alır ve ses, ışık veya başka bir efekt yapar.

MIDI, saniyede 31.250 bit hızında çalışan bir seri protokoldür. Kartın yerleşik seri portu (hepsi Mega'da da) bu hızda veri gönderebilir.

MIDI baytları iki türe ayrılır: komut baytları ve veri baytları . Komut baytları her zaman 128 veya daha büyük veya onaltılık biçimde 0x80 ila 0xFF'dir. Veri baytları her zaman hex cinsinden 127 veya 0x00 ila 0x7F'den düşüktür. Komutlar arasında not açık, not kapalı, eğim bükme vb. Veri baytları, çalınacak notanın perdesi, notanın hızı veya ses yüksekliği, perdenin bükülme miktarı vb. Daha fazla ayrıntı için, MIDI spesifikasyonuna veya Web üzerindeki birçok MIDI Protokol Kılavuzundan birine bakın.

MIDI verileri genellikle onaltılık olarak not edilir, çünkü MIDI bankaları ve enstrümanları 16'lı gruplar halinde gruplandırılmıştır.

Daha fazla bilgi için bu MIDI girişine veya bu örneğe bakınız .

Gerekli Donanım

  • Arduino veya Genuino Uno
  • Dişi MIDI jakı
  • 2220 ohm direnç
  • bağlantı telleri
  • MIDI özellikli cihaz (isteğe bağlı, test için)

Devre

Tüm MIDI konektörleri, MIDI spesifikasyonunun tanımı gereği dişidir. Konektörü panoya nasıl bağlayacağınız aşağıda açıklanmıştır:

  • 220 ohm direnç üzerinden Dijital pim 1'e bağlı MIDI jak pimi 5
  • MIDI jak pimi 2 toprağa bağlı
  • 220 ohm direnç üzerinden + 5V'ye bağlı MIDI jak pimi 4

büyütmek için resme tıklayın

Şematik

büyütmek için resme tıklayın

Kod

Dikkat DUE veya Leonardo gibi ATmega32U4 içeren bir kart kullanıyorsanız, lütfen aşağıdaki çizimde Serial1'i Serial1 ile değiştirin.


/*
  MIDI note player

  This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data.
  If this circuit is connected to a MIDI synth, it will play the notes
  F#-0 (0x1E) to F#-5 (0x5A) in sequence.

  The circuit:
  - digital in 1 connected to MIDI jack pin 5
  - MIDI jack pin 2 connected to ground
  - MIDI jack pin 4 connected to +5V through 220 ohm resistor
  - Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

  created 13 Jun 2006
  modified 13 Aug 2012
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Midi
*/

void setup() {
  // Set MIDI baud rate:
  Serial.begin(31250);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, note, 0x45);
    delay(100);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
    noteOn(0x90, note, 0x00);
    delay(100);
  }
}

// plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that
// data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

See Also

  • serial.begin()
  • for() döngü

  • ASCIITable- Arduino'nun gelişmiş seri çıkış fonksiyonlarını gösterir.
  • Dimmer- Bir LED'in parlaklığını değiştirmek için fareyi hareket ettirin.
  • Graph- Verileri bilgisayara gönderin ve İşlemde grafiğini çizin.
  • MultiSerialMega- Arduino ve Genuino Mega'da bulunan iki seri bağlantı noktasını kullanın.
  • PhysicalPixel- İşleme veya Maks / MSP'den kartınıza veri göndererek bir LED'i açın ve kapatın.
  • ReadASCIIString- Bir LED'in solması için virgülle ayrılmış bir tamsayı dizesi ayrıştırın.
  • SerialCallResponse- Bir çağrı ve yanıt (el sıkışma) yöntemi kullanarak birden çok değişken gönderin.
  • SerialCallResponseASCII- Bir çağrı ve yanıt (el sıkışma) yöntemi kullanarak birden çok değişken gönderin ve göndermeden önce değerleri ASCII kodlayın.
  • SerialEvent- SerialEvent () kullanımını gösterir.
  • VirtualColorMixer- Arduino'dan bilgisayarınıza birden çok değişken gönderin ve bunları İşleme veya Maks / MSP'de okuyun.