Saya membuat antarmuka sequencer drum untuk musik elektronik .
Ini menggunakan arduino mega sebagai mikroprosesor, dan saat ini antarmuka untuk program Pemrosesan yang saya tulis untuk komunikasi serial. Dari sana, pesan OSC dikirim ke program Max / MSP yang ditulis oleh mitra saya untuk membuat aliran data midi.
Begitu:
Antarmuka fisik saya -> Arduino Mega -> serial I / O -> Pemrosesan -> OSC -> Max / MSP -> Midi (-> aplikasi musik)
Saya memilih jalur ini sebagian karena tidak cukup pintar untuk menghapus langkah apa pun, tetapi juga untuk mengakomodasi kemampuan memperbarui antarmuka fisik seperti yang kita inginkan, mampu membuat antarmuka fisik multi-tujuan (beberapa mode untuk fader, kenop, dan tombol pilih suara), dan dapat memastikan waktu kritis misi dan modifikasi ritme (alias "swing").
Pesan berseri saya diatur seperti ini:
PL,1; // transport control: play
PL,0; // transport control: stop
SW,30; // swing value 30
TM,130; // tempo value 130
SD,1,8,04,0; // Step sequencer data, pattern 1, voice 8 (of 8), step 04 (of 16), off
MU,8,1; // Mute, voice 8 (of 8), on
SO,4,0; // Solo, voice 4 (of 8), off
VL,3,127; // Velocity, voice 3 (of 8), value 127
CC,1,127; // Midi CC, controller 1, value 127
NN,1,36; // Note number, voice 1 (of 8), value 36 (usually a kick drum)
Jadi, Anda dapat melihat bahwa berdasarkan jumlah koma per titik koma, saya dapat menentukan cara mengurai data serial dari arduino dalam program pemrosesan. Dari Memproses, jenis pesan ini diubah menjadi OSC seperti ini:
/beatseqr/play 1
/beatseqr/play 0
/beatseqr/swing 30
/beatseqr/tempo 130
/beatseqr/matrix/1/8/04 0
/beatseqr/mute/8 1
/beatseqr/solo/4 0
/beatseqr/velocity/3 127
/beatseqr/midicc/1 127
/beatseqr/midinn/1 36
Dan semuanya bekerja ok, tetapi rasanya tidak efisien. Apakah saya benar-benar membutuhkan aplikasi pemrosesan di tengah?
Sekarang, saya telah mencoba untuk memotong Pemrosesan dan bagian-bagian OSC dari persamaan, tapi saya kehilangan beberapa pengetahuan mengenai desain protokol data serial.
Saya sadar bahwa ada udpreceive
objek di Max. Dan itu berhasil, saya kira? Mungkin saya salah menggunakannya.
Pada satu titik saya telah mengganti semua kode arduino saya untuk tidak mengirim baris baru di akhir setiap pesan serial karena itu tidak berarti sesuatu yang istimewa pada objek Max udpreceive
. Bahkan, jika saya ingat dengan benar, itu hanya akan menerima pesan pertama hingga baris baru pertama dan kemudian akan berhenti memproses data. Jadi untuk menyiasatinya, saya mengeluarkan semua karakter baris baru dan kemudian akan memuntahkan ke max / msp terus menerus.
Maka masalah selanjutnya dengan metode ini adalah bahwa udpreceive
objek hanya menerima satu karakter pada satu waktu. Jadi saya mencoba menggunakan js
objek javascript untuk menggabungkan karakter yang masuk, dan kemudian menguraikannya pada titik koma dan koma. Masalah yang saya temui di sana adalah bahwa itu tidak dapat diprediksi dan tidak stabil. Karakter akan keluar dan pesan tidak dapat diproses. Jadi itu benar-benar membuat saya bertanya-tanya apakah saya harus mengubah protokol data serial saya menjadi sesuatu yang lebih kuat? Atau jika saya melakukan kesalahan sepenuhnya?
Haruskah saya memo semuanya dan mulai lagi dari awal menggunakan firmware firmata? Saya telah melihat beberapa tutorial untuk menggunakan firmata dengan Max / MSP , dan saya kira saya bisa melihat segar apa yang dilakukan oleh kode pada kotak dan jika perlu melakukannya sama sekali. Bisakah firmata menerima data string pada pin untuk dikirim ke LCD serial terpasang? jika saya dapat mengontrol LCD dari maks / msp, itu mungkin berhasil ok.
Ada saran?
OMGWTF
tombol, tetapi pertanyaan yang dipikirkan dengan sangat baik dan terperinci juga!