Cara Membuat Pengawal MIDI dengan Arduino

Cara Membuat Pengawal MIDI dengan Arduino

Sebagai pemuzik yang telah mengumpulkan koleksi alat muzik dan kotak suara, Arduino yang rendah hati adalah alat yang sempurna untuk membuat pengawal MIDI tersuai. Walaupun Raspberry Pi mungkin telah mengambil mahkota untuk projek Internet of Things (IoT), Arduino Uno sederhana (apakah jenis Arduino yang berbeza?) Mempunyai kekuatan lebih dari cukup untuk projek ini.





Kali pertama menggunakan Arduino? Jangan risau, kami sudah lengkap Panduan pemula Arduino untuk membaca sebelum anda menyelesaikan projek ini.





Apa itu MIDI?

MIDI bermaksud Antaramuka Digital Alat Muzik. Ini menggariskan cara standard untuk alat muzik berkomunikasi antara satu sama lain. Sekiranya anda memiliki papan kekunci elektronik, anda mungkin mempunyai antara muka MIDI. Walaupun terdapat beberapa butiran teknikal yang terlibat dalam pelaksanaan MIDI, penting untuk diingat bahawa MIDI bukan audio! Data MIDI adalah sekumpulan petunjuk sederhana (satu arahan disebut 'mesej') yang mungkin dilaksanakan oleh peranti lain untuk membuat bunyi atau parameter kawalan yang berbeza.





MIDI menyokong 16 saluran. Ini bermaksud bahawa setiap kabel dapat menyokong 16 peranti berbeza yang saling berkomunikasi antara satu sama lain. Peranti disambungkan menggunakan kabel DIN 5-pin. DIN bermaksud 'Institut Standardisasi Jerman', dan hanyalah kabel dengan lima pin di dalam penyambung. USB sering digunakan sebagai ganti DIN 5-pin, atau antara muka USB-MIDI dapat digunakan.

MIDI-Kabel-Lelaki



Kawal Perubahan dan Perubahan Program

Terdapat dua jenis utama mesej MIDI: Control Change, dan Program Change.

Mesej Control Change (CC) mengandungi nombor pengawal dan nilai antara 0 dan 127. Mesej CC sering digunakan untuk mengubah tetapan seperti kelantangan atau nada. Peranti yang menerima MIDI harus dilengkapi dengan manual yang menjelaskan saluran dan mesej apa yang disiapkan secara lalai, dan cara mengubahnya (dikenali sebagai pemetaan MIDI).





Mesej Perubahan Program (PC) lebih sederhana daripada mesej CC. Mesej PC terdiri daripada satu nombor, dan digunakan untuk mengubah pratetap atau tambalan pada peranti. Mesej PC kadang-kadang dikenali sebagai 'Patch Change'. Sama seperti mesej CC, pengeluar harus menyediakan dokumen yang menggariskan pratetap yang diubah oleh mesej tertentu.

Apa yang Anda Perlu

  • Arduino
  • Soket wanita 5-pin DIN
  • 2 x 220 ohm perintang
  • 2 x 10k perintang ohm
  • 2 x suis sesaat
  • Kabel penyambung
  • Papan roti
  • Kabel MIDI
  • Peranti MIDI atau antara muka USB
Air & Kayu 5 Pcs DIN 5 Pin PCB Memasang Soket Wanita untuk Papan Kekunci PC BELI SEKARANG DI AMAZON

Pelan Binaan

Projek ini akan cukup mudah. Anda tentu saja dapat menambahkan lebih banyak butang atau perkakasan untuk memenuhi keperluan anda. Hampir mana-mana Arduino akan sesuai - hanya tiga pin diperlukan untuk contoh ini. Projek ini terdiri daripada dua butang untuk mengendalikan program, port MIDI untuk mengirim data, dan peranti untuk menerima mesej. Litar ini telah dibina di atas papan roti di sini, namun mungkin untuk memindahkannya ke kotak projek dan penyambung yang disolder untuk penyelesaian yang kuat.





Pemasangan Litar

Litar Arduino-Midi-Controller

Sambungan MIDI

MIDI-Pinout

Kabelkan soket MIDI anda seperti berikut:

  • MIDI pin 5 ke Arduino Transmit (TX) 1 melalui perintang 220 ohm
  • MIDI pin 4 ke Arduino + 5V melalui perintang 220 ohm
  • MIDI pin 2 ke tanah Arduino

Sambungan Butang

Butang berfungsi dengan mengubah rintangan Arduino 'melihat'. Pin Arduino melalui suis terus ke tanah ( RENDAH ) melalui perintang 10k ohm (perintang 'tarik ke bawah', memastikan nilainya tetap rendah). Apabila butang ditekan, nilai yang dilihat oleh litar berubah menjadi + 5v tanpa perintang ( TINGGI ). Arduino dapat mengesan perubahan ini dengan menggunakan digitalRead (pin) arahan. Sambungkan butang ke pin 6 dan 7 pada input / output digital Arduino (I / O). Sambungkan kedua-dua butang:

  • Butang sebelah kiri hingga + 5V
  • Butang sebelah kanan ke Arduino Ground melalui perintang 10k ohm
  • Butang sebelah kanan ke pin Arduino (6 atau 7)

Ujian MIDI

Setelah semua perkakasan selesai, sudah tiba masanya untuk mengujinya. Anda memerlukan antara muka USB-MIDI (banyak antara muka audio dapat melakukan ini) dan kabel MIDI. Port MIDI yang tersambung di papan roti menghantar data, jadi itu adalah output. Komputer anda menerima data, oleh itu ia adalah input. Projek ini menggunakan Arduino yang sangat baik Perpustakaan MIDI v4.2 oleh Empat Puluh Tujuh Kesan. Setelah memasang Perpustakaan, anda boleh memasukkannya ke dalam kod anda dengan pergi ke Lakarkan> Sertakan Perpustakaan> MIDI .

Anda juga memerlukan program untuk memantau data MIDI yang masuk:

Sambungkan Arduino ke komputer anda dan muat naik kod ujian berikut (jangan lupa memilih papan dan port yang betul dari Alatan> Papan dan Alatan> Pelabuhan menu).

#include
#include
#include
#include
#include
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
Serial.begin(31250); // setup serial for MIDI
}
void loop() {
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(1000); // wait 1 second
midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel
delay(1000); // wait 1 second
}

Kod ini akan menghantar mesej CC, tunggu 1 saat, hantar mesej PC kemudian tunggu 1 saat selama-lamanya. Sekiranya semuanya berfungsi dengan betul, anda akan melihat mesej muncul di monitor MIDI anda.

Sekiranya tidak ada yang berlaku, jangan panik! Cuba selesaikan masalah:

  • Pastikan semua sambungan betul
  • Periksa port MIDI yang dikabelkan dengan betul - mesti ada 2 pin ganti di tepi luar
  • Periksa semula litar yang betul
  • Pastikan litar disambungkan ke antara muka USB-MIDI dengan kabel MIDI
  • Periksa kabel MIDI anda disambungkan ke input pada antara muka USB-MIDI anda
  • Pastikan Arduino mempunyai kekuatan
  • Pasang pemacu yang betul untuk antara muka USB-MIDI anda

Jika anda adalah masih menghadapi masalah mungkin perlu memeriksa papan roti anda. Papan murah kadangkala sangat tidak konsisten dan berkualiti rendah - ia berlaku pada saya semasa mengerjakan projek ini.

Ujian Butang

Kini tiba masanya untuk menguji butang berfungsi dengan betul. Muat naik kod ujian berikut. MIDI tidak perlu disambungkan untuk menguji bahagian ini.

const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
void setup() {
Serial.begin(9600); // setup serial for text
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
}
void loop() {

if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
Serial.println('Button One Works!'); // log result
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
Serial.println('Button Two Works!'); // log result
delay(250);
}
}

}

Jalankan kod ini (tetapi pastikan kabel USB tersambung) dan buka Monitor Serial ( Kanan Atas> Monitor Bersiri ). Apabila anda menekan butang, anda akan melihat 'Button One Works!' atau 'Butang Dua Karya!' bergantung pada butang yang anda tekan.

Terdapat satu catatan penting yang perlu diambil dari contoh ini - perisian henti-henti. Ini adalah kelewatan 10 milisaat (ms) sederhana antara memeriksa butang dan kemudian memeriksa butang sekali lagi. Ini meningkatkan ketepatan penekanan butang dan membantu mengelakkan bunyi mencetuskan Arduino. Anda tidak perlu melakukan ini, walaupun disyorkan.

Membuat Pengawal

Sekarang semuanya sudah berwayar dan berfungsi, sudah tiba masanya untuk memasang pengawal penuh.

Contoh ini akan menghantar mesej CC yang berbeza untuk setiap butang yang ditekan. Saya menggunakan ini untuk mengawal Ableton Live 9.6 pada OS X. Kodnya serupa dengan kedua-dua sampel ujian di atas.

#include
#include
#include
#include
#include
const int buttonOne = 6; // assign button pin to variable
const int buttonTwo = 7; // assign button pin to variable
MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
void setup() {
pinMode(buttonOne,INPUT); // setup button as input
pinMode(buttonTwo,INPUT); // setup button as input
Serial.begin(31250); // setup MIDI output
}
void loop() {
if(digitalRead(buttonOne) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonOne) == HIGH) { // check button state again
midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
delay(250);
}
}

if(digitalRead(buttonTwo) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonTwo) == HIGH) { // check button state again
midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel
delay(250);
}
}
}

Catatan - anda tidak akan dapat menggunakan Bersiri.println () dengan output MIDI.

Sekiranya anda ingin menghantar mesej PC dan bukannya CC, ganti:

midiOut.sendControlChange(42,127,1);

Dengan:

midiOut.sendProgramChange(value, channel);

Dalam Tindakan

Di bawah ini adalah demonstrasi sebagai pengawal untuk Ableton Live ( Perisian DJ terbaik untuk setiap anggaran ). Bahagian atas kanan menunjukkan meter audio, dan tengah atas menunjukkan mesej midi masuk (melalui Monitor MIDI pada OS X).

cara mengosongkan ruang pada windows 10

Sudahkah Anda Membuat Pengawal MIDI?

Terdapat banyak penggunaan praktikal untuk pengawal MIDI tersuai. Anda boleh membina unit kawalan kaki yang luas, atau pengawal studio yang anggun. Dan jika anda berminat untuk membelinya, berikut adalah pengawal USB MIDI terbaik yang boleh anda beli.

Kredit Gambar: Keith Gentry melalui Shutterstock.com

Kami harap anda menyukai item yang kami cadangkan dan bincangkan! MUO mempunyai perkongsian afiliasi dan tajaan, jadi kami menerima bahagian hasil dari beberapa pembelian anda. Ini tidak akan mempengaruhi harga yang anda bayar dan membantu kami menawarkan cadangan produk terbaik.

Berkongsi Berkongsi Tweet E-mel Adakah Perlu Ditingkatkan ke Windows 11?

Windows telah direka bentuk semula. Tetapi apakah itu cukup untuk meyakinkan anda untuk beralih dari Windows 10 ke Windows 11?

Baca Seterusnya
Topik-topik yang berkaitan
  • DIY
  • Perisian DJ
  • Arduino
  • Elektronik
  • TENGAH
Mengenai Pengarang Joe Coburn(136 Artikel Diterbitkan)

Joe adalah lulusan Sains Komputer dari University of Lincoln, UK. Dia seorang pembangun perisian profesional, dan ketika dia tidak terbang drone atau menulis muzik, dia sering didapati mengambil gambar atau menghasilkan video.

Lagi Dari Joe Coburn

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan