Bagaimana kami memainkan musik dengan jaringan saraf v 2.0

Hai, Habr.

Posting ini adalah tentang bagaimana kami membawa jaringan saraf ke kehidupan nyata. Jika Anda suka robotika dan teknik terapan, atau seperti neuron, atau mengedipkan LED pada Arduin, itu akan menarik. Namun, ini adalah kisah tentang cara mengumpulkan banyak komponen dan teknologi yang berbeda menjadi satu kesatuan dan membuat ide darinya. Detail di bawah potongan.

gambar

Setahun setengah yang lalu, kami melakukan proyek di mana kami menggunakan jaringan saraf berulang untuk menghasilkan musik. Itu menggambarkan bagaimana itu. Tahun ini, Eesti Kontsert (lembaga target, penyelenggara pertunjukan terbesar di negara ini) mengadakan serangkaian konser "Teknologi dan Musik" dan kami diundang untuk membuat pertunjukan dalam seri ini. Kami adalah kelompok MODULSHTEIN (Alexander Zhedelev, Marten Altrov dan Alexey Seminikhin) , serta Alexander Potuzhny, yang terlibat dalam teknik mesin, dan saya, Alexander Tavgen, arsitek perangkat lunak dari Playtech. Jika dalam proyek sebelumnya semuanya terjadi di dalam satu mesin dan sinyal dari model ditampilkan pada sampel, maka ide proyek ini adalah untuk mengeluarkan sinyal dan menghubungkannya ke instrumen live. Dan karena kita menggunakan model untuk menghasilkan ritme, instrumen yang akan dimainkan mesin adalah drum.

Drum yang akan kita gunakan adalah bagian dari alat peraga yang tersisa dari presentasi audio-visual IDEM.

gambar

Sedikit pengantar


Musik, seperti bahasa, terutama bahasa lisan, memiliki struktur sementara. Inilah ritme, interval, dinamika. Jika kita mensimulasikan urutan musik sebagai aliran simbol tertentu, maka untuk mensimulasikan struktur temporal ini, jaringan saraf berulang sangat cocok. Artikel terkenal oleh Andrej Karpathy adalah pengantar yang bagus untuk prinsip-prinsip di balik jaringan saraf berulang, dan ada banyak contoh bagus. Apa satu-satunya jaringan yang dilatih tentang kode sumber Linux? Atau seorang model yang terlatih dalam pidato Donald Trump.

Protokol MIDI sangat ideal untuk mewakili musik sebagai aliran karakter. Jadi, kita perlu mengubah sinyal MIDI ke input untuk model, dan mengubah output model kembali ke MIDI. Dan kemudian proyek Magenta dari Google datang untuk menyelamatkan, yang diumumkan pada tahun 2016.

Intinya, Magenta menyediakan antarmuka MIDI untuk model TensorFlow. Port MIDI virtual dibuat untuk respons panggilan, secara kasar - input dan output. Anda dapat menjalankan beberapa port paralel. Anda dapat menghubungkan model TensorFlow ke setiap pasangan port. File bundel yang disebut adalah pos pemeriksaan pelatihan dan grafik metadata dari TensorFlow. Jadi, Anda dapat menjelaskan proses interaksi secara singkat.

gambar

Saya jelaskan secara rinci di sini .

Tetapi jika dalam proyek sebelumnya kami menampilkan sinyal MIDI yang berasal dari model ke sampel, maka kali ini kami perlu mengeluarkannya dan menghubungkannya ke motor. Artinya, semuanya dapat direpresentasikan seperti ini: Tensorflow-Magenta-MIDI-Serial-Microcontroller-Actuators. Tiga langkah pertama telah diambil dan semua perhatian telah tertuju pada tiga tautan terakhir.

Sebelum Anda berpikir tentang cara mengubah dan mengirim sinyal dari mesin, Anda perlu memilih mikrokontroler yang akan menerima sinyal dan mengontrol aktuator. Opsi termudah adalah mengambil platform yang kompatibel dengan Arduino, meskipun pengontrol berbasis ATMega apa pun cocok.

Arduino dapat membaca Serial melalui USB, dan tugasnya adalah mengubah sinyal MIDI ke protokol port serial. Ada proyek open-midiserial projectgus.imtqy.com/hairless-midiserial proyek terbuka, yang memungkinkan Anda untuk mengkonversi MIDI ke perangkat Serial, baik untuk input dan output. Kenyamanan MIDI secara keseluruhan adalah Anda dapat mengontrol dan menghubungkan berbagai perangkat dengan sangat fleksibel.

gambar

Nah, maka Anda perlu mendapatkan alat dan mulai mencoba berbagai opsi desain.

Prototipe pertama harus dilakukan untuk mengevaluasi kemungkinan penundaan dan masalah dengan sinkronisasi.

Sinyal pergi ke Arduino, di mana, tergantung pada ketinggian catatan, itu ditampilkan pada output yang berbeda. Untuk tes, saya mengumpulkan sirkuit berbasis MOSFET klasik. MOSFET kira-kira merupakan transistor yang memungkinkan Anda untuk mengontrol arus tinggi; memberikan sinyal kontrol, Anda dapat membuka dan menutup transistor.

gambar

Nah, proyek Arduino seperti apa tanpa LED berkedip. Saya mengatur LED sehingga jika ada masalah saya mengerti di mana mereka berada, apakah sinyal dari Arduino masuk ke input MOSFET. Secara umum, ini terlihat seperti ini, kucing sangat menyukainya.



Secara umum, tidak ada penundaan dan masalah koneksi yang signifikan, tetapi masalah dari rencana yang berbeda diklarifikasi. Solenoida tidak cocok untuk mengekstraksi suara dari drum besar kami, mereka tidak memiliki kekuatan dampak. Solenoida 5 volt sendiri. Diputuskan untuk mencari sesuatu yang lebih kuat. Pilihan selanjutnya adalah motor yang digunakan pada kunci mobil. Mereka cukup kuat, dengan daya tarik yang baik, dan murah.

gambar

Tetapi ada satu poin. Motor untuk pintu mobil tidak hanya memiliki pukulan maju, tetapi juga stroke mundur. Untuk mengalahkan mereka, Anda perlu melakukan gerakan maju-jeda sangat cepat, tetapi untuk maju-mundur Anda tidak dapat melakukan hanya satu MOSFET, karena Anda perlu mengubah arah saat ini untuk motor ( H-Bridge ) sehingga bergerak di kedua arah, jadi saya membeli pelindung motor untuk Arduino, kompatibel dengan Adafruit. Jenis ini, hanya pada satu chip.

gambar

Ini adalah versi sudah dengan jembatan motor dan motor dari pintu mobil.


Dan sekarang tentang mekanika umum


Flashing LED pada Arduino adalah satu hal, tetapi kami harus membangun sistem yang akan memainkan jam konser. Dan inilah kesulitannya.

  1. Kekakuan suatu desain. Motor cukup kuat, dan dudukan yang harus dipasang harus tahan getaran selama satu jam.


    gambar

    Kami mencoba 3 atau 4 pilihan desain sampai kami menemukan yang dapat diterima. Halangan dengan tongkat tidak boleh kaku, karena tongkat harus memiliki rebound elastis dari drum, dan halangan yang kaku akan sangat menurunkan suara. Kami menggunakan screed bangunan.
  2. Mekanisme dampaknya sendiri. Itu terdiri dari gerakan maju cepat, jeda dan gerakan mundur. Tetapi seberapa besar seharusnya interval dari gerakan ini? Ini hanya dapat ditentukan secara empiris. Selain itu, interval tergantung pada tempat menempelnya tongkat, catatan yang ditampilkan. Kami menentukan interval dengan coba-coba. Untuk memperjelas, bagian dari kode Arduino yang bertanggung jawab atas pukulan tampak seperti ini.

    gambar
  3. Semua motor berbeda. Motor itu sendiri memiliki penggerak mekanis dan karenanya memberikan suara yang cukup mencolok. Tetapi kebisingan menjadi lebih kuat, jika motor menyimpang dari poros dampak, dan ini meningkatkan risiko kerusakan motor. Mengingat kekuatan getaran dan benturan, kami kembali bersandar pada kekakuan struktur. Alexander Potuzhny melakukan banyak hal di sini dalam hal memperbaiki jadwal pertandingan.
  4. Setel ulang pengontrol dari gangguan palsu. Karena akan ada banyak perangkat, kabel di sekitar, dan motor itu sendiri mengeluarkan suara.

Karena motor digerakkan oleh musik, akan mungkin untuk membuat mainan seks dari ini. Dia menggelar musik favoritnya, seperti Imperial March, dan ...

Perakitan dan latihan


Perakitan terakhir dan latihan dilakukan di studio musik Teater Rusia Estonia.

gambar



Masalah dengan latihan dengan jaringan saraf juga bahwa jaringan itu sendiri adalah non-deterministik. Interaksi berlangsung dalam mode respons panggilan, dan setiap kali jawaban jaringan akan berbeda - oleh karena itu, tidak mungkin untuk melatih versi terakhir.

Konsep musik


Untuk pertunjukan, kami juga menyiapkan video. Awalnya, kami juga berpikir untuk mengontrol aliran video melalui MIDI, untuk memainkan overlay dan mengurangi video yang dihasilkan oleh GAN - tetapi kami tidak berhasil membuat lingkungan untuk mesin kedua dan terhubung ke model. Oleh karena itu, video untuk setiap bagian dari pertunjukan dipra-render; GAN dan manajemen overlay digunakan. Semuanya disinkronkan dengan midi_clock utama.


Untuk siaran langsung, saya menggunakan VDMX5, di mana aliran video mengalir.

gambar

Sesaat sebelum pertunjukan, mereka membuat presentasi di televisi.


Dan sangat tidak biasa melihat poster di aula konser Estonia (ini seperti Teater Bolshoi untuk Moskow).

gambar

gambar

Performa


Pertunjukan itu sendiri berlangsung di panggung Sõltumatu Tantsu Lava, ini adalah aula kecil (sedikit lebih dari 100 orang) di kawasan kreatif Telliskivi di kompleks Vaba Lava. Hanya menginstal dan mengatur semua peralatan membutuhkan waktu lebih dari 4 jam. Sepenuhnya terhubung sudah hampir di malam hari.


Dan sudah tanpa cahaya.


Aula itu penuh, meskipun publisitasnya terlambat. Saya berada di sisi panggung dan mengontrol aliran video. Konser itu sendiri sukses besar - bagaimana modelnya bekerja, bagaimana suara dan videonya berjalan. Penonton mengatakan bahwa mereka dikirim ke perjalanan di suatu tempat dalam 10-15 menit. :) Semuanya ternyata sangat atmosfer.

gambar

gambar

gambar

gambar


gambar

www.Audiokinetica.com

Aleksandr Tavgen - Solusi IT, pengembangan perangkat lunak
Aleksandr Potužnoi - dukungan teknis

Modulshtein:
www.Modulshtein.com

Di tempat

Aleksandr Žedeljov alias FAERSHTEIN– gitar, Ableton, synth analog
Marten Altrov - klarinet, klarinet bass
Aleksei Semenihhin alias DJ Bandit - Fx, Sampel, Goresan

Source: https://habr.com/ru/post/id463237/


All Articles