İçindekiler:

Melodi: 8 Adım (Resimlerle)
Melodi: 8 Adım (Resimlerle)

Video: Melodi: 8 Adım (Resimlerle)

Video: Melodi: 8 Adım (Resimlerle)
Video: DOM DOM YES YES Melodika Notaları - Ses Veriyorum 2024, Kasım
Anonim
Image
Image
Akışı Anlamak
Akışı Anlamak

Evden çalışmaya olanak sağlayan birçok avantajın ve teknolojik çözümlerin yanı sıra, iş arkadaşları arasında yaşam desteği oluşturma ve oluşturma zorluğu devam etmektedir. MELODY, işbirlikçi kısa müzik reçellerinin oluşturulmasını sağlayan dijital-fiziksel bir cihazdır. İş arkadaşları zamanı koordine eder ve cihaz, dönüşler ve farklı rastgele seslerle bir jam session ayarlar. İlk katılımcı belirli bir ritim belirler, ardından her katılımcı belirlenen ritme karşılık gelen kendi müzikal bölümünü ekler. Müzik geçmişi olmayan kullanıcıların işini kolaylaştırmak için yazılım, tıklamalarını örnekleyerek ve uygun ritmi ayarlayarak ayak uydurmalarına yardımcı olur. Oturum, tüm katılımcılar kendi bölümlerini kaydetmeyi bitirdiğinde yaklaşık 3 dakika sonra sona erer.

O nasıl çalışır?

Melody, MQTT protokolü üzerinden bir Node-Red sunucusuyla iletişim kuran ESP2866 donanımına dayanmaktadır. Cihaz, oyuncunun notlarını sunucuya ve sunucudan diğer oyunculara geri gönderilen bir dizi karaktere çevirir. Bu, herkesin ağ bağlantısından kesinti olmadan melodiyi çalmasını ve duymasını sağlar.

Melodi iki ana görsel göstergeye sahiptir. Birincisi, oyuncuya Döngünün ne zaman başladığını ve ne zaman bittiğini bildiren ve oyuncunun sırasının gelip gelmediğini gösteren bir LED şerittir. İkincisi, mevcut melodiyi görsel olarak göstermek için kullanılan, ürünün ortasındaki bir LED göstergedir. 3'ten 1'e geri sayım, çalmaya başlamayı belirtir ve bir zamanlama ekranı, kullanıcıyı grubun Melodisi'ne ne zaman ve nasıl katkıda bulunmak istediğini yönlendirir. Kayıt, gelecekte kullanılmak üzere otomatik olarak şirketin bulutuna kaydedilir.

Bu proje, disiplinler arası Center Herzliya'daki (IDC) Medya inovasyon laboratuvarında (MiLab) dört öğrenci tarafından tasarlandı: Shahar Agassy, Eden Bar-Tov, Gal Eshchar ve Gad Stern. Zvika Markfeld, Netta Ofer ve Michal Leschinsky'nin yardımıyla ve Noa Morag ve Oren Zuckerman'ın rehberliğinde.

Buradaki bazı şeylerin nasıl uygulanacağını öğrenmeme yardımcı olan harika bir talimat oluşturduğu için Tom Granot'a teşekkürler (buradaki adımlardan bazıları bu harika talimattan sonra modellenmiştir).

Gereçler

  • 3 boyutlu yazıcı
  • ESP8266
  • 7 düğme
  • 8X8 LED matris
  • WS2812B LED Şerit
  • I2S amplifikatörü
  • Dişi 1/8" (3,5 mm) 4 Kutuplu Ses Jakı
  • 4X 1K direnç
  • 1X3K direnç

Adım 1: Akışı Anlamak

Akışı Anlamak
Akışı Anlamak
Akışı Anlamak
Akışı Anlamak

Bu projede bazı sorunları çözmeye çalıştık:

  1. Oyuncuların aynı anda oynayabilmesi için çevrimiçi nasıl yapabiliriz?
  2. İnternet gecikmelerini nasıl aşabilir ve sorunsuz bir deneyim yaratabiliriz?
  3. Müzik geçmişi olmayan insanlar için bile müziğin kulağa hoş gelmesini nasıl sağlayabiliriz?

Müziğin zamanlaması ve serileştirilmesi

İlk sorunu çözmek için MIDI protokolüne baktık ve onu kullanmaya çalıştık, ancak gerçekten ihtiyacımız olandan daha sağlam olduğunu gördük, ayrıca ilk çalışan prototipi oluşturabilmemiz için gerçekten basitleştirmek istedik. Bu yüzden MIDI'den ilham aldık ve bir dizi sayı (0-5 arası) ile temsil edilen müzikal döngümüzün, oyuncuların döngü boyutunun zamanı ile temsil etmesini sağladık (tüm müzikal matematiği daha sonra açıklayacağız).

Müzikte ritimleri müzik çubuklarına böleriz. Her çubuk temelde küçük bir zaman dilimidir, biz 4/4 kullanmayı seçeriz (bir müzikal barda 4 vuruş anlamına gelir) - en yaygın olanı.

Her vuruş daha sonra 4 örnekleme penceresine bölünür, böylece çalınan her nota otomatik olarak iyi bir konuma hizalanır ve ayrıca bir şarkıyı sunucuya gönderilecek bir dizi sayı olarak temsil etmemize izin verir.

Müzikal geçmişi olmayan oyunculara dost olmak için üç şey yaptık:

  1. Oyuncunun daha az seçeneğe odaklanmasını sağlamak için tuş sayısını sınırlayın.
  2. Uyumsuzluk sesi olmaması için aynı ölçekte birlikte iyi çalınan notalar seçtik.
  3. Her basış ritmin "penceresine" ayarlanır, böylece oyuncu müziğini ritme yabancılaştırır

iletişim protokolleri

Peki müziğin mantığını anladıktan sonra bunu oyuncularımız arasında nasıl iletebiliriz?

Bunun için, mesajları cihazlar arasında taşıyan bir yayınla-abone ol ağ protokolü olan MQTT'yi kullanıyoruz.

her oyuncu iki konuya abonedir: döngü (en güncel döngüyü al) ve sıra (eşzamanlama amacıyla mevcut oyuncunun kimliğini alır).

Sırası geldiğinde, bir oyuncu melodiyi çalmayı bitirdiğinde, YUKARI düğmesine basacak ve döngü (güncellenmiş olan), döngü kanalındaki tüm oyunculara geri iletecek olan MQTT aracısına gönderilecek.

bu döngü, mevcut döngü bitene kadar "hareketsiz" kalacaktır ve ardından onu değiştirecektir. böylece oyuncu için şeffaf olacaktır. ayrıca yeni döngü şu anda oynatıcı cihazda yerel olarak kaydedildiğinden, müzik için internet gecikmesi yoktur ve bu nedenle ikinci sorunu çözdük.

Adım 2: Sunucuyu Ayarlama - Ngrok

Sunucuyu Ayarlama - Ngrok
Sunucuyu Ayarlama - Ngrok
Sunucuyu Ayarlama - Ngrok
Sunucuyu Ayarlama - Ngrok

ngrok bir tünel açma hizmetidir. Yerel olarak çalışan bir hizmeti (bizim durumumuzda, Node-RED) dış dünyaya - bir sunucu kurma veya DNS kayıtlarıyla uğraşma zahmetine girmeden - göstermemize olanak tanır. Bilgisayarınızda Node-RED'i çalıştırmanız ve ardından Node-RED'in çalıştığı bağlantı noktasında ngrok'u çalıştırmanız yeterlidir.

İşte bu kadar - hangi ağa bağlı olduğuna bakılmaksızın dünyanın herhangi bir yerinden Node-RED'e erişmek için kullanabileceğiniz bir URL alacaksınız.

Kurulum ve Yapılandırma

  1. İşletim sisteminiz için ngrok'u buradan indirin.
  2. İndirme sayfasındaki adımı "Ateşle" adımına kadar izleyin.
  3. "Ateşleme adımında", 80'i 1883 ile ve http'yi tcp'ye, örneğin./ngrok tcp 1883 ile değiştirin.
  4. URL'yi ve bağlantı noktası numarasını kaydedin (resimde görülüyor), daha sonra ihtiyacımız olacak.

3. Adım: Sunucuyu Ayarlama - Düğüm-Kırmızı

Sunucuyu Ayarlama - Düğüm-Kırmızı
Sunucuyu Ayarlama - Düğüm-Kırmızı

Projenin Sunucu mantığı olan Node-RED, çeşitli yazılımları (ve donanımları!) birbirine bağlamanızı sağlayan görsel bir programlama ortamıdır.

Burada tüm oyuncular arasındaki iletişimin mantığını oluşturduk (döngüleri paylaşma ve alma ve dönüşleri koordine etme)

Node-Red'in Kurulumu

Yerel bilgisayarınıza Node-RED akışımızı yüklemek için aşağıdaki adımları izleyin:

  1. Node-RED, Node.js gerektirir, buradan yükleyin
  2. buradaki talimatları kullanarak Node-RED'i kurun.

Artık Node-RED'i yüklediğinize göre, yukarıdaki adımdaki talimatları kullanarak çalıştırın ve boş bir tuval sayfası görebildiğinizi doğrulayın. https://127.0.0.1:1880 konumunda olmalıdır.

Şimdi bu proje için kullandığımız akışı içe aktarmanız gerekecek, burada bulabilir ve JSON dosyasını eklemek için içe aktar'a basıp Dağıt'a basabilirsiniz.

Node-Red'in Kurulumu:

Bu adıma ekli resme bakarsanız, oyuncularımızdan birinden güncel bir döngü aldığımız 2 ana "eylemimiz" olduğunu görebilirsiniz ve ardından bunu diğer tüm oyunculara iletiyoruz. ayrıca yeni sırayı tüm oyunculara yayınlıyoruz. Böylece oyun senkronize kalır.

Adım 4: Sunucuyu Ayarlama - MQTT (Sivrisinek)

Sunucuyu Ayarlama - MQTT (Sivrisinek)
Sunucuyu Ayarlama - MQTT (Sivrisinek)

Node-RED'in kendi MQTT aracısı olmadığından ve sensörlerimiz ve aktivatörlerimizle MQTT üzerinden iletişim kurmamız gerekeceğinden, özel bir MQTT aracısı kullanacağız. Node-RED, Mosquitto'yu önerdiğinden, kullanacağımız şey bu. MQTT ve neden IoT projelerinde sıklıkla kullanıldığı hakkında bazı bilgiler için buraya bakın.

Kurulum ve Yapılandırma

  1. Mosquitto'yu buradan indirin ve işletim sisteminize göre kurun.
  2. Normalde, Node-RED'i Mosquitto'ya bağlamak için buradaki talimatları izlemeniz gerekir. Ancak, akışımızı kullandıysanız, sizin için önceden yapılandırılmıştır. Akışı ve Mosquitrro'yu düzgün bir şekilde yüklediğiniz ve Mosquitto, 1883 numaralı bağlantı noktasında (varsayılan olarak çalıştığı) çalıştığı sürece, kutunun dışında çalışması gerekir.
  3. Bunun, MQTT aracısının ve Node-RED sunucunuzun aynı makinede çalıştığı anlamına geldiğini unutmayın. Bu, sistem içindeki iletişimi basitleştirmek için kullanışlıdır. Daha fazla bilgi için aşağıdaki nota bakın.

MQTT trafiğini izleme

Trafiği izlemek için MQTTfx kullandım, çok basit bir GUI'ye sahip harika bir araç.

Adım 5: Kod

kod
kod

kodu GitHub'da bulabilirsiniz (tüm veri dosyaları ve config.h ile birlikte)

Bağımlılıklar:

kodu esp2866'ya yüklemeden önce birkaç kitaplık yüklemeniz gerekir:

  1. libmad-8266 (müziği SPIFF'den ve I2S'ye deşifre edin)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

SPIFF kullanarak sesleri ESP'ye yükleyin:

  1. bu harika talimatı takip edin.
  2. veri klasörünü kaynak kod dizinine ekleyin.
  3. Arduino IDE'de Araçlar altında Flash boyutunu "4MB (FS:3MB TOA:~512KB)" olarak değiştirin
  4. Ayrıca Araçlar'ın altında ESP2866 Çizim Verisi Yükleme'ye basın

Parametrelerin ayarlanması:

bundan sonra config.h dosyasına gidin ve WIFI kimlik bilgileri ve ngrok URL'si ve önceki adımdaki bağlantı noktası gibi gerekli verileri ekleyin (referans için ekteki fotoğrafı kontrol edin).

p.s - Akıllı telefonunuzdan WIFI ve ngrok verilerini ayarlamanıza yardımcı olacak bir otomatik bağlantı özelliği ekledim, çünkü bu sadece bir ilk kavram kanıtı olduğu için bir gün eklemek isterim.

İstediğiniz oyuncu miktarını ayarlayın (bu oyun en iyi 2-3 oyuncu için çalışır ve kutunun dışında 2 oyuncu için bir dizi ses ile yüklenir). ancak daha fazlası için kolayca ayarlanabilir:

her oyuncu için, kullanıcıya özel bir konunun altında bir döngü yayınlamak için kırmızı düğüme başka bir akış ekleyin.

ayrıca, bu diziyi özel seslerinize dönüştürerek müzik sesini düzenleyebilirsiniz:

Burada 3 çeşit enstrüman görebilirsiniz (Oyuncu 0 için Chrods, Oyuncu 1 için Kurşun ve Oyuncu 2 için Bass)

const char* yolları[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"};

Adım 6: 3B Modeli Yazdırın

3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır
3B Modeli Yazdır

İlk adım için STL'yi indirin ve yazdırın.

destekleri çıkardıktan ve belki biraz zımparaladıktan sonra (yazıcının çözünürlüğüne bağlı olarak)

istediğiniz renge boyayın

Adım 7: Montaj ve Kaynak

Montaj ve Kaynak
Montaj ve Kaynak

Yani temel olarak gerçek sihrin gerçekleştiği yer burasıdır.

bu şemaları takip edebilir ve her şeyi birlikte kaynaklayabilirsiniz.

PIN'lerin konumunu değiştirebileceğinizi unutmayın, sadece kodda da değiştirmeyi unutmayın.

A0 ve I2S yerinde oldukça sabittir:

A0 direnç köprüsü için olduğundan (5'ten hangi düğmeye basıldığını bilmek için akımdaki farkı kullanırız - bu Talimatlara benzer.

I2S'nin burada bulabileceğiniz belirli bir kodlaması vardır.

8. Adım: Arkadaşlarınızla Bazı Döngüler Oynayın

Önerilen: