(hampir) Programmer Universal MIDI SysEx CC (dan Sequencer ): 7 Langkah (dengan Gambar)
(hampir) Programmer Universal MIDI SysEx CC (dan Sequencer ): 7 Langkah (dengan Gambar)
Anonim
(hampir) Pengaturcara Universal MIDI SysEx CC (dan Sequencer…)
(hampir) Pengaturcara Universal MIDI SysEx CC (dan Sequencer…)
(hampir) Pengaturcara Universal MIDI SysEx CC (dan Sequencer…)
(hampir) Pengaturcara Universal MIDI SysEx CC (dan Sequencer…)

Pada pertengahan tahun lapan puluhan, manufaturers synths memulakan proses "kurang lebih baik" yang menyebabkan synths barebones. Ini memungkinkan pengurangan kos di sisi pembuat, tetapi menjadikan proses tambalan menjadi tidak wajar bagi pengguna akhir.

Pengilang sendiri dan syarikat pihak ketiga menyedari kotak pilihan yang penuh dengan tombol dan / atau slaid untuk membolehkan anda benar-benar "bermain" dengan nada synths anda, tetapi ini adalah harga yang sangat bodoh pada masa ini dan, seperti biasa, kami terpaksa mencari penyelesaian murah oleh kami sendiri;)

Projek ini datang dari keperluan saya untuk memprogram tambalan pada beberapa pembelian synth terbaru saya: Roland Alpha Juno 2 dan JX8P. Ia bermula sebagai pengawal SysEx yang sederhana, kemudian ia tumbuh pada saya dan menjadi sesuatu yang lebih kompleks, dengan sintesis lain yang disokong dalam perjalanan (Korg DW8000, Oberheim Matrix 6 / 6R, SCI MAX) dan penjujukan terbina dalam.

Dalam arahan ini saya akan menunjukkan kepada anda bagaimana mewujudkan pengawal anda sendiri: alat murah yang meniru kotak kawalan parameter yang sangat berharga itu … dan banyak lagi (teruskan membaca untuk maklumat lanjut …).

Langkah 1: Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)

Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)
Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)
Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)
Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)
Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)
Apa Sebenarnya Perkara Ini (dan Apa Yang Tidak…)

Pengawal MIDI SysEx dan Control Change di sini pada dasarnya adalah pengawal MIDI 16 tombol (potensiometer) dan 4 butang. Sketsa lalai mengendalikan tiga "halaman", dengan jumlah 48 parameter nada synth.

Saya membuat pengawal serasi dengan kawalan mesej MIDI (jenis mesej MIDI yang ringkas dan "global" yang banyak digunakan oleh pengeluar synth terutamanya dari tahun 90an) dan mesej SysEx (jenis mesej MIDI lain, jauh lebih umum dan sangat khusus untuk pengguna digunakan pada tahun 80-an).

Secara khusus, pengawal secara lalai serasi dengan:

- Roland Alpha Juno (1/2)

- Roland JX8P

- Korg DW8000

- Oberheim Matrix 6 / 6R (> firmware 2.14)

- Litar berurutan MAX / SixTrak.

Anda akhirnya dapat membolehkan pengawal bertindak pada mana-mana synth yang dapat menerima mesej perubahan kawalan MIDI (CC), tetapi ia dilumpuhkan secara lalai.

Sebagai sumber terbuka projek, sangat mudah untuk menyokong sebarang pilihan lain (lihat langkah kod untuk perincian).

Susun atur parameter nada dengan semua nombor itu mungkin membingungkan pada mulanya, tetapi tidak "rawak" seperti yang kelihatan: ia mengikuti susunan carta pelaksanaan MIDI pengeluar. Ini adalah pilihan reka bentuk untuk memastikan kodnya ringkas dan "universal".

Anda boleh memuat turun helaian gambar dengan "susun atur" 4x4 yang saya sedar untuk Alpha-Junos, JX8P, DW8000, Matrix 6 dan MAX / SixTrak di halaman ini: parameter biru adalah parameter yang boleh anda ubah semasa di halaman 1, hitamkan pada halaman 2 dan jingga pada halaman 3.

Walaupun pengawal tidak mempunyai skrin, bermain-main dengan sintesis yang menunjukkan kepada anda parameter apa yang disetel dalam masa nyata menjadikan proses membuat tambalan menggembirakan. JX8P dan Matrix 6, misalnya, mampu melakukan ini; sebaliknya, Alpha Juno, tidak menunjukkan kepada anda parameter yang diubah dan membuat sesuatu menjadi sedikit lebih sukar (tetapi membuat tampalan hebat pasti dapat dilakukan dan lebih mudah daripada dengan menggunakan antara muka tanpa tombol terbina dalam); DW8000 hanya mempunyai paparan berangka, tetapi anda dapat melihat tweakin anda dalam masa nyata sehingga ia berada di antara ini.

Bagaimana dengan butang di sana?

Nah, yang pertama (kiri atas dalam susun atur saya) adalah untuk melayari halaman: melompat ke halaman parameter seterusnya pada setiap tekan butang. LED akan menunjukkan halaman mana anda berada.

Yang kedua apabila ditekan, hantarkan tampalan itu ke tempat anda bekerja kembali ke synth (gambarkan: anda membuat tampalan hidup anda, kemudian menyentuh butang program di permukaan synth dan tambalan khusus butang dimuat … semua kerja anda telah habis !). Dengan butang ini anda dapat mengirim semua nilai yang telah dihafal oleh pengaturcara selama proses penambalan terakhir. Proses mengingat tambalan ini tidak akan berfungsi jika anda menekan pengacak lagi (proses pengacakan menimpa semua parameter dalam memori) dan hanya berkesan pada parameter yang anda edit sekurang-kurangnya sekali. Tampalan terbaru tidak disimpan dalam memori selepas ditutup.

Yang ketiga adalah untuk fungsi sekunder: randomizer / patcher! Putar putar berlawanan arah jarum jam yang anda mahukan parameter yang mereka gunakan untuk mengunci hingga nilai minimum (iaitu osilator LFO, sampul pengayun, dll.) Atau putar sepenuhnya mengikut arah jam untuk memaksimumkan nilai (iaitu isipadu campuran osilator, kelantangan VCA, dll.) Dan tekan butang untuk memulakan proses pengacakan untuk semua parameter lain.

Butang keempat ada untuk mengaktifkan telur Paskah (semacam…) yang saya letakkan dalam kod setelah menyedari bahawa susun aturnya sesuai untuk… penjuru MIDI 16 langkah! Tepat: tekan butang keempat (butang MODE), pengawal akan memasuki "mod sequencer" dan anda akan dibenarkan mencetuskan nota dengan cara yang serupa seperti yang dilakukan oleh sequencer analog lama. Bagus ya!

Tekan butang MODE sekali lagi untuk kembali ke mod pengawal / patcher.

Bagaimana dengan LED tersebut?

Terdapat 4 LED hampir setiap butang (di sebelah kanan setiap butang dalam susun atur saya); LED ini mempunyai banyak ruang pancuran:

1) mereka memberitahu anda halaman parameter mana anda berada (LED atas menyala ketika anda berada di halaman 1, LED di bawahnya menyala ketika halaman 2 aktif, LED 3 menyala … anda sendiri tahu). Kami terhad kepada ATM 3 halaman, tetapi kodnya dapat disesuaikan dengan mudah untuk mengendalikan lebih banyak halaman;

2) LED kedua menunjukkan parameter halaman 2 DAN menyala ketika mikrokontroler mengirim patch sebelumnya (penarikan patch);

3) LED ketiga menunjukkan parameter halaman 3 DAN menyala semasa proses rawak.

LED keempat tidak melakukan apa-apa dalam mod pengawal MIDI dan digunakan untuk perubahan MODE global.

Semua fungsi ini dihantar sebagai mesej MIDI, jadi untuk menjadi efektif, synth anda harus mampu / diaktifkan untuk menerima dan menafsirkan mesej seperti ini

Langkah 2: Penyusun 16 Langkah "Tersembunyi"

The
The

Seperti yang saya katakan, semasa menguji alat kawalan, saya menyedari bahawa adalah baik untuk membiarkan sekumpulan nota berjalan sehingga saya dapat mengubah parameter synth dan mempunyai idea yang lebih baik mengenai kesan akhir pada nada. Saya mempunyai sequencer perisian (saya sangat suka seq24!), Tetapi perkakasan ini adalah sequencer 16 langkah yang hampir SEMPURNA! Maka hanya masalah kod untuk melaksanakannya.

Anda boleh beralih antara mod pengawal dan mod penjujukan dengan menekan butang # 4 (butang MODE).

Semasa dalam mod penjujukan butang berfungsi berbeza dan LED memberi anda maklumat baru:

- butang pertama (butang SHIFT) apabila ditekan memungkinkan untuk tempo, panjang nota, saluran dan pengubahsuaian oktaf; nilai tempo diberikan oleh kedudukan potensiometer pertama, panjang nota dihitung dari kedudukan potensiometer kedua, saluran MIDI dari posisi potensiometer ketiga dan keempat dan oktaf (-1 o hingga +2) dari periuk kelima. Anda dapat mengawal tempo dari 40 BPM (putar potensiometer # 1 penuh berlawanan arah jam sambil menekan butang # 1 ditekan) hingga hampir 240 BPM (putar potensiometer # 1 penuh mengikut arah jam sambil menekan butang # 1 ditekan). Anda boleh menetapkan panjang nota menjadi nota setengah, nota suku, nota delapan, nota enam belas dengan memutar pot # 2 sambil menekan butang SHIFT. Anda boleh menetapkan saluran MIDI (saluran utama dan saluran sekunder) dari 1 hingga 16. Julat nota asas (dari C2 hingga F # 4) dapat diturunkan satu oktaf atau meningkat satu atau dua oktaf.

Secara tempo lalai ditetapkan ke 120 BPM dan panjang nota hingga nota suku tahun.

- butang kedua memulakan dan menghentikan urutan nota. Seperti yang dikatakan, jika anda menukar mod dengan menekan butang # 4 (MODE) semasa menjalankan urutan, anda akan memasuki mod pengawal tetapi urutan akan terus berjalan.

- butang ketiga adalah PANIK! Dengan menekan semua nota akan ditutup.

- yang keempat digunakan untuk beralih antara mod global (pather atau sequencer) apabila butang # 1 tidak ditekan, atau antara mod urutan (lihat di ikuti) ketika # 1 tertekan.

Dalam mod penjujukan jika anda menekan butang pilih mod sambil terus menekan butang # 1 (SHIFT), anda boleh beralih antara 3 mod urutan yang berbeza:

1 - 16 langkah urutan mono

Urutan poli 2 - 16 langkah: nota satu oktaf lebih rendah daripada yang ditentukan oleh periuk juga dipicu (ini mengalirkan 2 suara setiap rentak)

Urutan poli 3 - 8 langkah, saluran dua: dua urutan 8 langkah selari dihantar ke dua saluran yang berbeza (CH1 dan CH2 secara lalai); dengan menetapkan nilai saluran yang sama di saluran utama dan kedua anda boleh mempunyai dua urutan 8 langkah selari yang dimainkan oleh synthesizer (polifonik) yang sama.

Mengenai LED: sebaik sahaja anda memasuki mod penjujukan, keempat-empat lampu akan menyala. Apabila anda memulakan urutan, LED akan mengikut urutan (atau urutan). Saya meletakkan satu LED setiap empat potensiometer dan sesuai untuk saya. Adalah mudah untuk mengubah lakaran untuk menangani 16 LED, satu untuk setiap langkah anda.

Keistimewaan langkah penjujukan langkah yang perlu difahami oleh seseorang: MIDI sync IN, langkah-langkah (anda hanya dapat menutup satu langkah), keluar CV.

Saya telah melaksanakan jam OUT, tetapi kadang-kadang kereta. Saya mencuba dua pendekatan untuk ini (satu dengan dan satu tanpa gangguan pemasa), tetapi mereka berdua tidak sempurna (atau gagal total). Jam MIDI mestilah sesuai untuk bekerja dalam jangka masa panjang. Bagaimanapun, isyarat jam dihantar dan anda boleh mematikannya terus pada lakaran (lihat kemudian untuk maklumat lanjut).

Perhatikan bahawa pengatur langkah ini adalah MIDI, atau digital jika anda mahu, jadi untuk bekerja mesti disambungkan ke synth yang diaktifkan untuk menerima dan mentafsirkan mesej seperti ini

Langkah 3: Perkakasan Diperlukan dan Membangun

Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun
Perkakasan Diperlukan dan Membangun

Selepas semua kata-kata ini, mari bersenang-senang!

Kami menggunakan kaedah Arduino yang biasa. Saya menggunakan Arduino MEGA kerana jumlah input analog yang tinggi (kami mahukan kotak yang penuh dengan tombol kenop, bukan ?!:)).

Khususnya, Arduino MEGA dapat menangani 16 input analog (dengan beberapa perkakasan tweaking, iaitu dengan membuat muxing, anda dapat meningkatkannya tetapi kami tidak akan melalui jalan ini di sini), jadi kami akan menghantar 48 mesej MIDI melalui 16 potensiometr. Setiap potensiometer kemudian akan mengawal tiga parameter, satu untuk setiap "halaman"; halaman dipilih dengan butang suis.

Senarai perkakasan:

- 1x Arduino MEGA

- Potensiometer 10x linear, lilitan tunggal 10 K ohm

- Tombol periuk 16x

- 4x butang tekan sesaat

- LED 4x

- Perintang 6x 220 ohm

- 1x penyambung MIDI

- 1x kotak projek ABS

Sebilangan kabel, wayar solder dan masa lapang selama enam - lapan jam.

Saya menggunakan papan serpihan dan beberapa header pin untuk menyedari semacam perisai yang saya pasangkan pada perintang dan mengarahkan kabel. Ini mempunyai kelebihan untuk membiarkan anda mengeluarkan Arduino anda dan menggunakannya untuk projek lain (kita semua kehabisan papan Arduino pada satu ketika!). Bagaimanapun, ia tidak wajib dilakukan dan pendekatan lain yang baik adalah dengan melepaskan kabel pin header dan solder arduino MEGA secara langsung di tempatnya.

Saya menggunakan 200 perintang ohm sebagai ganti 220 ohm perintang dan tetap berfungsi dengan sempurna; saya yakin walaupun perintang 150 ohm akan berfungsi dengan baik (untuk komunikasi MIDI dan LED).

Untuk membentuk kotak, saya mula-mula melekatkan beberapa kertas pelekat di permukaan kotak, diukur di mana lubang harus digerudi (saya mempunyai 3 cm dari lubang ke lubang untuk membiarkan semua pasu sesuai) membuat lubang panduan dan kemudian diperbesar ke kanan ukuran untuk membiarkan ulir pasu atau benang butang berlalu dengan gerudi mini. Saya menghabiskan lebih kurang 2 jam untuk menyelesaikan kotak itu. Saya menyedari lubang kecil juga, dan memasang LED di tempatnya.

Saya juga menggerudi lubang untuk penyambung MIDI OUT dan satu lagi untuk penyambung kuasa arduino (saya menggunakan terus penyambung kuasa USB terbina dalam dan mengunci MEGA arduino di tempatnya).

PERINGATAN: selalu SELALU memakai pelindung mata dan tangan semasa menggerudi, apa sahaja bahan yang anda kerjakan (plastik, kayu, logam, komposit … tidak menjadi masalah: anda berisiko baik dari alat kuasa dan serpihan bahan yang terhakis / dipecat dari alat bergerak).

Kemudian, saya meletakkan semua periuk dan butang dan menyolder komponen seperti pada gambar yang dilampirkan. Cara yang berkesan untuk mengurangkan berat objek akhir (dan panjang kabel) adalah dengan membuat rantai daisy semua periuk baik pada garis 5V dan garis GND.

Dan sebelum ada yang bertanya: Saya tahu, kotak yang saya gunakan itu hodoh! Tetapi ia percuma dan tidak ada yang mengalahkan percuma:)

Langkah 4: Pendawaian

Pendawaian
Pendawaian

Memasang kabel mudah seperti memasang potensiometer (x16), butang tekan (x4) dan LED (x4) ke papan mikrokontroler Arduino. Semua asas Arduino dibahas di sini:)

Dilampirkan adalah pendawaian. Perhatikan bahawa:

- Semua pin analog digunakan (dari A0 hingga A15), satu untuk setiap potensiometer;

- 4 pin digital (input) digunakan (dari D51, D49, D47, D45), satu untuk setiap butang;

- 4 pin digital (output) lain digunakan untuk LED (D43, D41, D39, D37);

- Sambungan keluar MIDI sangat mudah dan meminta dua perintang 220 ohm (tetapi hingga 150 ohm akan berfungsi)

- Butang tidak meminta perintang pulldown kerana lakaran itu mengaktifkan perintang penarik Arduino dalaman.

- Setiap LED meminta perintang had semasa (200-220 ohm ok untuk LED hijau).

Saya menggunakan pin digital yang disenaraikan untuk komoditi, tetapi pin itu bukan "khas" (kami tidak menggunakan kemampuan pwm beberapa pin di sini atau beberapa ciri khusus pin lain): anda boleh menetapkan pin digital kegemaran anda, tetapi ingat untuk mengubah suai kod yang sesuai atau butang / LED anda tidak akan berfungsi!

Harap perhatikan bahawa sambungan MIDI OUT dalam gambar adalah pandangan DEPAN (bukan pandangan belakang).

Langkah 5: Perisian - Beberapa Pautan ke Teori

Saya tidak akan menerangkan teori penuh di sebalik mesej Sistem Eksklusif atau Perubahan Kawalan kerana terdapat banyak artikel bagus di luar sana dan tidak masuk akal untuk menulis semula apa yang telah ditulis.

Hanya beberapa pautan pantas untuk pelaksanaan Roland SysEx:

- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (BAHASA INGGERIS)

- https://www.2writers.com/eddie/tutsysex.htm (BAHASA INGGERIS)

- https://www.chromakinetics.com/handsonic/rolSysEx.h… (BAHASA INGGERIS)

- https://www.audiocentralmagazine.com/system-exclusi… (ITALIANO)

dan beberapa pautan untuk MIDI secara umum:

-

-

Langkah 6: Perisian - Lakaran

Di sini dilampirkan lakaran yang harus anda muat naik ke Arduino Mega anda.

Saya cuba menjadikan programmer sebagai "universal" mungkin, yang bermaksud bahawa saya cuba mengurangkan potongan kod khusus synth. Saya cuba mengekalkan kodnya semudah mungkin. Menambah penjujukan langkah menjadikan perkara lebih rumit dan kodnya lebih tidak kemas, bagaimanapun ia sangat berbaloi untuk saya. Menjaga kod "universal" adalah mengapa susun atur pengawal begitu "rawak": ia mengikuti susunan parameter pelaksanaan MIDI yang dibuat oleh Synth Manufacturer dalam manual. Ini mungkin membingungkan pada awalnya, tetapi anda akan terbiasa dengan cepat.

Kod / sketsa / firmware lalai menyokong "hanya" 48 parameter (tiga halaman masing-masing 16 tombol) jadi tidak mungkin untuk mengawal semua mesej MIDI yang disokong oleh synth anda (fikirkan pada Access Virus atau Novation Supernova: mereka menerima lebih banyak atau kurang 110 parameter yang mematuhi MIDI). Anda boleh menukar lakaran dengan mudah untuk menyokong lebih banyak mesej, jika diperlukan.

Sebenarnya mesej SysEx yang serasi dengan Roland Alpha-Juno, JX8P, Korg DW8000 dan Oberheim Matrix 6 disokong. Saya meninggalkan kod untuk mesej yang serasi dengan Juno 106 sekiranya anda memerlukannya.

Untuk Matrix 6, saya harus memilih parameter untuk dikawal. Saya meninggalkan sampul ketiga, jalan kedua dan lain-lain. Matrik tidak dapat dikendalikan melalui MIDI pula, jadi juga sudah habis. Anda memerlukan firmware yang dikemas kini (ver. 2.14 atau lebih tinggi) dan anda harus menetapkan parameter "Master -> Sysex Enable" ke "3".

Jam keluar bagaimanapun kereta (jam mesti ketat-sempurna untuk berfungsi sebagaimana mestinya dan mungkin dua pendekatan yang saya pakai di mana tidak berkesan). Secara lalai ia dilumpuhkan.

Kod tersebut merangkumi komen, jadi tidak perlu mengulas lebih lanjut di sini.

Seperti biasa: ingat bahawa saya bukan pengekod dalam kehidupan sebenar dan pasti ada cara yang lebih baik untuk membuat kod apa yang kita perlukan di sini. Sekiranya anda seorang pengekod dan mempunyai cadangan, anda dipersilakan! Tolong hantarkan saya variasi yang dapat meningkatkan kecekapan / keberkesanan kod dan saya akan memasukkannya ke lakaran utama (jelas Penyumbang!).

Saya selalu belajar sesuatu yang baru dengan membaca beberapa kod pengekod yang baik;)

Langkah 7: Projek Berkaitan

Sejauh yang saya tahu, tidak ada pengawal dan pengatur parameter MIDI di luar sana (mungkin Behringer BCR2000 lama dengan firmware yang diubah suai?)

bagaimanapun, jika anda tidak cenderung untuk mewujudkan kotak seperti ini tetapi sangat berminat dengan penyelesaian murah untuk mengawal parameter synth anda dari jauh, pertimbangkan alternatif lain:

- Editor CTRL MIDI: ini adalah program sumber terbuka percuma yang cemerlang yang dijalankan pada win / Linux / mac yang dapat mengubah PC anda menjadi pengawal penuh untuk SysEx synths

- Penukar CC "Junosex" David Konsumer: projek ini meminta kerja perkakasan kecil di sisi anda dan ideanya hebat - penukar CC to SysEx berasaskan arduino yang membolehkan anda menggunakan pengawal MIDI bukan SysEx biasa (iaitu papan kekunci utama AKAI MPK) untuk bercakap dengan synth sedia SysEx anda

Disyorkan: