Daftar Isi:

Melodi: 8 Langkah (dengan Gambar)
Melodi: 8 Langkah (dengan Gambar)

Video: Melodi: 8 Langkah (dengan Gambar)

Video: Melodi: 8 Langkah (dengan Gambar)
Video: Tugas 1 - Pola Ritmik - Birama 4/4 - 8 Bar - Hemalia Amanda 2024, November
Anonim
Image
Image
Memahami Arus
Memahami Arus

Di samping banyaknya keunggulan dan solusi teknologi yang memungkinkan bekerja dari rumah, kesulitan merumuskan dan menciptakan penyangga kehidupan di antara rekan kerja tetap ada. MELODY adalah perangkat digital-fisik yang memungkinkan penciptaan kemacetan musik pendek kolaboratif. Rekan kerja mengoordinasikan waktu dan perangkat mengatur jam session dengan belokan dan suara acak yang berbeda. Peserta pertama mengatur ritme tertentu, setelah itu setiap peserta menambahkan bagian musik mereka sendiri sesuai dengan ritme yang ditetapkan. Untuk memudahkan pengguna tanpa latar belakang musik, perangkat lunak ini membantu mereka mengimbangi dengan mengambil sampel klik mereka dan menyesuaikan dengan ritme yang sesuai. Sesi berakhir setelah sekitar 3 menit ketika semua peserta telah selesai merekam bagian mereka.

Bagaimana cara kerjanya?

Melody didasarkan pada perangkat keras ESP2866, yang berkomunikasi dengan server Node-Red melalui protokol MQTT. Perangkat menerjemahkan catatan pemain menjadi serangkaian karakter yang dikirim ke server dan dari server kembali ke pemain lain. Hal ini memungkinkan semua orang untuk bermain dan mendengar lagu tanpa gangguan dari koneksi jaringan mereka.

Melody memiliki dua indikator visual utama. Yang pertama adalah strip LED yang memberi tahu pemain kapan Loop dimulai dan kapan berakhir dan menunjukkan apakah giliran pemain. Yang kedua adalah tampilan LED di tengah produk, yang digunakan untuk menampilkan lagu yang ada secara visual. Hitung mundur dari 3 hingga 1 menunjukkan untuk mulai bermain dan tampilan pengaturan waktu mengarahkan pengguna kapan dan bagaimana dia ingin berkontribusi pada Melodi grup. Rekaman secara otomatis disimpan ke cloud perusahaan untuk digunakan di masa mendatang.

Proyek ini dirancang oleh empat siswa di lab inovasi Media (MiLab) di Interdisipliner Center Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar, dan Gad Stern. Dengan bantuan Zvika Markfeld, Netta Ofer dan Michal Leschinsky serta bimbingan Noa Morag dan Oren Zuckerman.

terima kasih kepada Tom Granot karena telah membuat instruksi hebat yang membantu saya mempelajari cara menerapkan beberapa hal di sini (beberapa langkah di sini dimodelkan setelah instruksi hebat ini).

Perlengkapan

  • pencetak 3D
  • ESP8266
  • 7 tombol
  • 8X8 LED matriks
  • Strip LED WS2812B
  • penguat I2S
  • Jack Audio 4 Kutub Wanita 1/8" (3,5mm)
  • 4X 1K resistor
  • 1X3K resistor

Langkah 1: Memahami Aliran

Memahami Arus
Memahami Arus
Memahami Arus
Memahami Arus

Dalam proyek ini kami mencoba mengatasi beberapa masalah:

  1. Bagaimana kita bisa membuatnya online, sehingga pemain bisa bermain pada saat yang sama?
  2. Bagaimana kita bisa mengatasi latensi internet dan menciptakan pengalaman yang mulus?
  3. Bagaimana kita bisa membuat musik terdengar bagus bahkan untuk orang tanpa latar belakang musik?

Waktu dan serialisasi musik

Untuk mengatasi masalah pertama, kami melihat protokol MIDI dan mencoba menggunakannya, tetapi kami melihat bahwa protokol ini lebih kuat daripada yang sebenarnya kami butuhkan, juga kami sangat ingin membuatnya sederhana sehingga kami dapat membangun prototipe kerja pertama. Jadi kami mengambil inspirasi dari MIDI dan membuat loop musik kami diwakili oleh string angka (dari 0-5) kali ukuran loop waktu pemain (kami akan menjelaskan semua matematika musik nanti).

Dalam musik, kami membagi ritme menjadi bar musik. Setiap bilah pada dasarnya adalah segmen waktu kecil, kami memilih untuk menggunakan 4/4 (artinya 4 ketukan dalam bilah musik) - yang paling umum.

Setiap ketukan kemudian dibagi menjadi 4 jendela pengambilan sampel sehingga setiap nada yang dimainkan akan disejajarkan secara otomatis ke posisi c yang baik dan juga memungkinkan kita untuk mewakili lagu sebagai rangkaian angka untuk dikirim ke server.

Agar bersahabat dengan pemain tanpa latar belakang musik, kami melakukan tiga hal:

  1. Batasi jumlah tombol untuk membuat pemain fokus pada opsi yang lebih sedikit.
  2. Kami memilih nada pada skala yang sama yang dimainkan bersama dengan baik sehingga tidak akan ada suara disonansi.
  3. Setiap penekanan diatur ke "jendela" ritme sehingga musik pemain asing dengan ritme

Protokol komunikasi

Jadi setelah kita memahami logika di balik musik, bagaimana kita bisa mengomunikasikannya di antara para pemain kita?

untuk itu, kami menggunakan MQTT, protokol jaringan publish-subscribe yang mengangkut pesan antar perangkat.

setiap pemain berlangganan dua topik: loop (mendapatkan loop terbaru) dan turn (mendapatkan id pemain saat ini untuk tujuan sinkronisasi).

Pada gilirannya ketika seorang pemain selesai memainkan lagu, dia akan menekan tombol UP dan loop (yang diperbarui) akan dikirim ke broker MQTT, yang akan mengirimkannya kembali ke semua pemain di saluran loop.

loop ini akan tetap "tidak aktif" sampai loop saat ini selesai diputar dan kemudian akan menggantikannya. sehingga akan transparan bagi pemain. juga karena loop baru saat ini disimpan secara lokal di perangkat pemutar, tidak ada latensi internet untuk musik, jadi kami memecahkan masalah kedua.

Langkah 2: Mengatur Server - Ngrok

Setting Server - Ngrok
Setting Server - Ngrok
Setting Server - Ngrok
Setting Server - Ngrok

ngrok adalah layanan tunneling. Ini memungkinkan kami untuk mengekspos layanan yang berjalan secara lokal (dalam kasus kami, Node-RED) ke dunia luar - tanpa perlu repot menyiapkan server atau berurusan dengan catatan DNS. Anda cukup menjalankan Node-RED di komputer Anda, lalu jalankan ngrok pada port yang sama dengan Node-RED.

Itu saja - Anda akan mendapatkan URL yang dapat Anda gunakan untuk mengakses Node-RED dari mana saja di dunia, terlepas dari jaringan apa yang terhubung dengannya.

Instalasi & Konfigurasi

  1. Unduh ngrok untuk sistem operasi Anda dari sini.
  2. Ikuti langkah di halaman download, hingga langkah "Fire it up".
  3. Dalam "Langkah Nyalakan", tukar 80 untuk 1883 - dan http ke tcp seperti pada,./ngrok tcp 1883 tergantung pada
  4. simpan URL dan nomor port (telah terlihat pada gambar) yang akan kita butuhkan nanti.

Langkah 3: Mengatur Server - Node-Red

Mengatur Server - Node-Merah
Mengatur Server - Node-Merah

Logika Server proyek, Node-RED adalah lingkungan pemrograman visual yang memungkinkan Anda untuk menghubungkan berbagai perangkat lunak (dan perangkat keras!).

Di sini kami membuat logika komunikasi antara semua pemain (berbagi dan menerima putaran dan mengoordinasikan putaran)

Instal Node-Merah

ikuti langkah-langkah berikut untuk memuat aliran Node-RED kami di komputer lokal Anda:

  1. Node-RED membutuhkan Node.js, instal dari sini
  2. instal Node-RED sendiri menggunakan petunjuk di sini.

Sekarang setelah Anda menginstal Node-RED, jalankan menggunakan petunjuk pada langkah di atas dan validasi Anda dapat melihat halaman kanvas kosong. Itu harus berada di

Anda sekarang perlu mengimpor aliran yang kami gunakan untuk proyek ini, Anda dapat menemukannya di sini dan cukup tekan impor tambahkan file JSON dan tekan Deploy.

Instal Node-Red:

jika Anda melihat gambar yang dilampirkan pada langkah ini, Anda dapat melihat bahwa kami memiliki 2 "tindakan" utama, kami menerima loop arus dari salah satu pemain kami dan kemudian kami mengirimkannya ke semua pemain lain. selain itu, kami menyiarkan giliran baru ke semua pemain. sehingga permainan tetap sinkron.

Langkah 4: Setting Server - MQTT (Nyamuk)

Setting Server - MQTT (Nyamuk)
Setting Server - MQTT (Nyamuk)

Karena Node-RED tidak memiliki broker MQTT sendiri, dan kami perlu berkomunikasi dengan sensor dan aktivator kami melalui MQTT, kami akan menggunakan broker MQTT khusus. Karena Node-RED merekomendasikan Mosquitto, ini yang akan kita gunakan. Lihat di sini untuk beberapa informasi tentang MQTT dan mengapa sering digunakan dalam proyek IoT.

Instalasi & Konfigurasi

  1. Unduh Mosquitto dari sini dan instal, semuanya sesuai dengan sistem operasi Anda.
  2. Biasanya, Anda harus mengikuti petunjuk di sini untuk menghubungkan Node-RED ke Mosquitto. Namun, jika Anda menggunakan alur kami, itu sudah dikonfigurasi sebelumnya untuk Anda. Selama Anda menginstal aliran dan Mosquitrro dengan benar, dan Mosquitto berjalan pada port 1883 (yang berjalan secara default), itu harus bekerja di luar kotak.
  3. Perhatikan bahwa ini berarti broker MQTT dan server Node-RED Anda berjalan di mesin yang sama. Hal ini berguna untuk mempermudah komunikasi di dalam sistem. Lihat catatan di bawah untuk informasi lebih lanjut.

Memantau lalu lintas MQTT

Saya menggunakan MQTTfx untuk memantau lalu lintas, ini adalah alat yang hebat dengan GUI yang sangat sederhana.

Langkah 5: Kode

Kode
Kode

Anda dapat menemukan kode di GitHub (dengan semua file data dan config.h)

Dependensi:

sebelum memuat kode ke esp2866 Anda harus menginstal beberapa pustaka:

  1. libmad-8266 (decode musik dari SPIFF dan ke I2S)
  2. Klien EspMQTT
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Unggah suara ke ESP menggunakan SPIFF:

  1. ikuti instruksi yang hebat ini.
  2. tambahkan folder data ke direktori kode sumber.
  3. Di Arduino IDE di bawah Alat, ubah ukuran Flash menjadi "4MB (FS:3MB TOA:~512KB)"
  4. Juga di bawah Alat Tekan Unggah Data Sketsa ESP2866

Mengatur parameter:

setelah itu buka file config.h dan tambahkan data yang diperlukan seperti kredensial WIFI dan URL ngrok dan port dari langkah sebelumnya (periksa foto terlampir untuk referensi).

p.s - Saya belum menambahkan fitur koneksi otomatis untuk membantu Anda mengatur WIFI dan data ngrok dari ponsel pintar Anda, karena itu hanya bukti konsep pertama, saya ingin menambahkannya suatu hari nanti.

Tetapkan jumlah pemain yang Anda inginkan (permainan ini berfungsi paling baik untuk 2-3 pemain dan di luar kotak itu dimuat dengan berbagai suara untuk 2 pemain). tetapi dapat dengan mudah disesuaikan untuk lebih:

untuk setiap pemain menambahkan aliran lain di node-merah untuk menerbitkan loop di bawah topik khusus pengguna.

juga, Anda dapat mengedit suara musik dengan mengubah susunan ini ke suara khusus Anda:

di sini Anda dapat melihat 3 jenis instrumen (Chrod untuk pemain 0, Lead untuk pemain 1, dan Bass untuk pemain 2)

const char* paths[NUMofNotes] = {"/blank1.wav", "/Chords_Am.wav", "/Chords_F.wav", "/Chords_C.wav", "/Chords_G.wav", "/Chords_Dm.wav", "/blank2.wav", "/Lead_C.wav", "/Lead_D.wav", "/Lead_E.wav", "/Lead_G.wav", "/Lead_A.wav", "/blank0.wav", "/Bass_C3.wav", "/Bass_D3.wav", "/Bass_F3.wav", "/Bass_G3.wav", "/Bass_A3.wav"};

Langkah 6: Cetak Model 3D

Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D

Untuk langkah pertama, unduh STL dan cetak.

setelah melepas penyangga dan mungkin sedikit pengamplasan (tergantung resolusi printer)

cat dengan warna yang diinginkan

Langkah 7: Perakitan dan Pengelasan

Perakitan dan Pengelasan
Perakitan dan Pengelasan

Jadi pada dasarnya di sinilah keajaiban yang sebenarnya terjadi.

Anda dapat mengikuti skema ini dan menyatukan semuanya.

ingat bahwa Anda dapat mengubah posisi PIN, ingatlah untuk mengubahnya dalam kode juga.

A0 dan I2S cukup terpasang di tempatnya:

karena A0 adalah untuk jembatan resistor (kami menggunakan perbedaan arus untuk mengetahui tombol mana dari 5 yang ditekan - mirip dengan Instruksi ini.

I2S memiliki pengkodean khusus, Anda dapat menemukannya di sini

Langkah 8: Mainkan Beberapa Loop Dengan Teman Anda

Direkomendasikan: