Cuprins:

Melodie: 8 pași (cu imagini)
Melodie: 8 pași (cu imagini)

Video: Melodie: 8 pași (cu imagini)

Video: Melodie: 8 pași (cu imagini)
Video: Cipri Popescu ❤️ O viață și încă o zi [videoclip oficial] 2024, Iulie
Anonim
Image
Image
Înțelegerea fluxului
Înțelegerea fluxului

Alături de numeroasele avantaje și soluții tehnologice care permit munca de acasă, rămâne și dificultatea de a formula și a crea suport pentru viață în rândul colegilor de muncă. MELODY este un dispozitiv digital-fizic care permite crearea de blocaje muzicale scurte colaborative. Colegii de lucru coordonează timpul, iar dispozitivul stabilește o sesiune de blocare cu ture și sunete aleatorii diferite. Primul participant stabilește un ritm specific, după care fiecare participant adaugă propria secțiune muzicală corespunzătoare ritmului stabilit. Pentru a ușura utilizatorii fără fundal muzical, software-ul îi ajută să țină pasul prin eșantionarea clicurilor și ajustarea la ritmul adecvat. Sesiunea se încheie după aproximativ 3 minute, când toți participanții au terminat de înregistrat partea lor.

Cum functioneazã?

Melody se bazează pe hardware-ul ESP2866, care comunică cu un server Node-Red prin protocolul MQTT. Dispozitivul traduce notele jucătorului într-un șir de caractere care este trimis la server și de la server înapoi la ceilalți jucători. Acest lucru permite tuturor să redea și să audă melodia fără întrerupere din conexiunea lor la rețea.

Melodia are doi indicatori vizuali principali. Prima este o bandă LED care îi permite jucătorului să știe când începe Bucla și când se termină și indică dacă este rândul jucătorului. Al doilea este un afișaj LED în centrul produsului, care este utilizat pentru a afișa vizual melodia existentă. O numărătoare inversă de la 3 la 1 indică începerea redării, iar un afișaj de sincronizare direcționează utilizatorul când și cum vrea să contribuie la Melodia grupului. Înregistrarea este salvată automat în cloud-ul companiei pentru utilizare ulterioară.

Acest proiect a fost conceput de patru studenți la laboratorul de inovare media (MiLab) de la Centrul interdisciplinar Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar și Gad Stern. Cu asistența lui Zvika Markfeld, Netta Ofer și Michal Leschinsky și îndrumarea lui Noa Morag și Oren Zuckerman.

mulțumesc lui Tom Granot pentru crearea unui instructabil extraordinar care m-a ajutat să învăț cum să implementez unele dintre lucrurile de aici (unii dintre pașii de aici sunt modelați după acest instructabil extraordinar).

Provizii

  • imprimantă 3d
  • ESP8266
  • 7 butoane
  • Matrice LED 8X8
  • Benzi LED WS2812B
  • Amplificator I2S
  • Mufă audio audio de 4 poli, de 1/8 "(3,5 mm)
  • Rezistor 4X 1K
  • Rezistor 1X3K

Pasul 1: Înțelegerea fluxului

Înțelegerea fluxului
Înțelegerea fluxului
Înțelegerea fluxului
Înțelegerea fluxului

În acest proiect am încercat să abordăm câteva probleme:

  1. Cum o putem face online, astfel încât jucătorii să poată juca în același timp?
  2. Cum putem ocoli latențele internetului și să creăm o experiență perfectă?
  3. Cum putem face ca muzica să sune bine chiar și pentru persoanele fără fond muzical?

Programarea și serializarea muzicii

Pentru a rezolva prima problemă, ne-am uitat la protocolul MIDI și am încercat să-l folosim, dar am văzut că este mai robust decât ceea ce aveam de fapt nevoie, de asemenea, am vrut cu adevărat să îl simplificăm, astfel încât să putem construi primul prototip de lucru. Așa că ne-am inspirat din MIDI și ne-am făcut bucla muzicală reprezentată printr-un șir de numere (de la 0 la 5) de ori cât dimensiunea buclelor este redată de jucători (vom explica toate matematica muzicală mai târziu).

În muzică, împărțim ritmurile în bare muzicale. Fiecare bar este practic un segment de timp redus, alegem să folosim 4/4 (adică 4 bătăi într-un bar muzical) - cel mai comun.

Fiecare ritm este apoi împărțit în 4 ferestre de eșantionare, astfel încât fiecare notă redată va fi aliniată automat la o poziție bună și ne va permite, de asemenea, să reprezentăm o melodie ca un șir de numere pe care să le trimitem la server.

Pentru a fi prietenoși cu jucătorii fără fond muzical, am făcut trei lucruri:

  1. Limitați numărul de taste pentru a face jucătorul să se concentreze pe mai puține opțiuni.
  2. Am ales note pe aceeași scară care joacă bine împreună, astfel încât să nu existe sunet disonant.
  3. Fiecare apăsare este setată la „fereastra” ritmului, astfel înstrăinând muzica playerului la ritm

Protocoale de comunicare

Deci, după ce am înțeles logica din spatele muzicii, cum o putem comunica între jucătorii noștri?

pentru asta, folosim MQTT, un protocol de rețea de publicare-abonare care transportă mesaje între dispozitive.

fiecare jucător este abonat la două subiecte: bucla (obține cea mai actuală buclă) și tura (obține id-ul jucătorului curent în scopuri de sincronizare).

La rândul lor, când un jucător a terminat de redat melodia, el / ea va apăsa butonul SUS și bucla (cea actualizată) va fi trimisă brokerului MQTT, care o va transmite înapoi tuturor jucătorilor de pe canalul buclei.

această buclă va rămâne „inactivă” până când bucla curentă este terminată de redare și apoi o va înlocui. astfel va fi transparent pentru jucător. De asemenea, deoarece noua buclă este salvată în mod local la dispozitivul player nu există o latență pe internet pentru muzică, așa că am rezolvat a doua problemă.

Pasul 2: Setarea serverului - Ngrok

Setarea serverului - Ngrok
Setarea serverului - Ngrok
Setarea serverului - Ngrok
Setarea serverului - Ngrok

ngrok este un serviciu de tunelare. Ne permite să expunem un serviciu care rulează la nivel local (în cazul nostru, Node-RED) către lumea exterioară - fără a fi nevoie să configurați un server sau să vă ocupați de înregistrări DNS. Pur și simplu rulați Node-RED pe computer și apoi rulați ngrok pe același port pe care se execută Node-RED.

Gata - veți obține o adresă URL pe care o puteți folosi pentru a accesa Node-RED de oriunde în lume, indiferent de rețeaua la care este conectat.

Instalare și configurare

  1. Descărcați ngrok pentru sistemul dvs. de operare de aici.
  2. Urmați pasul de pe pagina de descărcare, până la pasul „Fire it up”.
  3. În „Pasul de pornire”, schimbați 80 pentru 1883 - și http către tcp ca în,./ngrok tcp 1883 în funcție de
  4. salvați adresa URL și numărul portului (a văzut în imagine) vom avea nevoie de, mai târziu.

Pasul 3: Setarea serverului - Nod-Roșu

Setarea serverului - nod-roșu
Setarea serverului - nod-roșu

Logica Server a proiectului, Node-RED este un mediu de programare vizual care vă permite să conectați diverse software (și hardware!).

Aici am făcut logica comunicării între toți jucătorii (partajarea și primirea buclelor și coordonarea tururilor)

Instalarea Node-Red

urmați pașii următori pentru a încărca fluxul nostru Node-RED pe computerul dvs. local:

  1. Node-RED necesită Node.js, instalați-l de aici
  2. instalați Node-RED în sine folosind instrucțiunile de aici.

Acum că aveți instalat Node-RED, rulați-l folosind instrucțiunile de la pasul de mai sus și validați, puteți vedea o pagină de pânză goală. Ar trebui să fie localizat în

Acum va trebui să importați fluxul pe care l-am folosit pentru acest proiect, îl puteți găsi aici și doar apăsați import adăugați fișierul JSON și apăsați pe Deploy.

Instalarea Node-Red:

dacă te uiți la imaginea atașată acestui pas, poți vedea că avem 2 „acțiuni” principale, primim o buclă de curent de la unul dintre jucătorii noștri și apoi o transmitem tuturor celorlalți jucători. în plus, am transmis noul rând la toți jucătorii. deci jocul rămâne sincronizat.

Pasul 4: Setarea serverului - MQTT (Mosquitto)

Setarea serverului - MQTT (Mosquitto)
Setarea serverului - MQTT (Mosquitto)

Deoarece Node-RED nu are propriul broker MQTT și va trebui să comunicăm cu senzorii și activatorii noștri prin MQTT, vom folosi un broker dedicat MQTT. Deoarece Node-RED recomandă Mosquitto, acesta este cel pe care îl vom folosi. Vedeți aici câteva informații despre MQTT și de ce este adesea folosit în proiecte IoT.

Instalare și configurare

  1. Descărcați Mosquitto de aici și instalați-l, în funcție de sistemul dvs. de operare.
  2. În mod normal, ar trebui să urmați instrucțiunile de aici pentru a conecta Node-RED la Mosquitto. Cu toate acestea, dacă ați folosit fluxul nostru, acesta este deja preconfigurat pentru dvs. Atâta timp cât instalați fluxul și Mosquitrro în mod corespunzător, iar Mosquitto rulează pe portul 1883 (pe care rulează implicit), ar trebui să funcționeze din cutie.
  3. Rețineți că acest lucru înseamnă că brokerul MQTT și serverul dvs. Node-RED rulează pe aceeași mașină. Acest lucru este util pentru simplificarea comunicării în interiorul sistemului. Consultați nota de mai jos pentru mai multe informații.

Monitorizarea traficului MQTT

Am folosit MQTTfx pentru a monitoriza traficul, este un instrument grozav cu o interfață grafică foarte simplă.

Pasul 5: Codul

Codul
Codul

puteți găsi codul în GitHub (cu toate fișierele de date și config.h)

Dependențe:

înainte de a încărca codul pe esp2866 va trebui să instalați câteva biblioteci:

  1. libmad-8266 (decodează muzica din SPIFF și în I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Încărcați sunetele în ESP utilizând SPIFF:

  1. urmează acest mare instructabil.
  2. adăugați folderul de date în directorul codului sursă.
  3. În IDE-ul Arduino, sub Instrumente, schimbați dimensiunea blițului la „4 MB (FS: 3 MB TOA: ~ 512 KB)”
  4. De asemenea, sub Instrumente, apăsați ESP2866 Sketch Data Upload

Setarea parametrilor:

după aceea, accesați fișierul config.h și adăugați datele necesare, cum ar fi acreditările WIFI și adresa URL și portul ngrok din pasul anterior (verificați fotografia atașată pentru referință).

p.s - Am adăugat încă o funcție de conectare automată pentru a vă ajuta să setați datele WIFI și ngrok de pe telefonul dvs. inteligent, deoarece a fost doar o primă dovadă a conceptului, aș dori să o adaug într-o zi.

Setați cantitatea de jucător dorită (acest joc funcționează cel mai bine pentru 2-3 jucători și din cutie este încărcat cu o serie de sunete pentru 2 jucători). dar poate fi ajustat cu ușurință pentru mai multe:

pentru fiecare jucător adăugați un alt flux în nod-roșu pentru a publica o buclă într-un sub subiect specific utilizatorului.

de asemenea, puteți edita sunetul muzical modificând această matrice la sunetele dvs. personalizate:

aici puteți vedea 3 tipuri de instrumente (Chrods pentru player 0, Lead pentru player 1 și Bass pentru player 2)

const char * căi [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"};

Pasul 6: Imprimați modelul 3D

Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D
Imprimați modelul 3D

Pentru primul pas, descărcați STL și imprimați-le.

după îndepărtarea suporturilor și poate un pic de șlefuire (în funcție de rezoluția imprimantei)

pictează-l la culoarea dorită

Pasul 7: Asamblare și sudare

Asamblare și sudare
Asamblare și sudare

Așadar, practic aici se întâmplă adevărata magie.

puteți urmări aceste scheme și sudura totul împreună.

Rețineți că puteți schimba poziția codurilor PIN, nu uitați să o modificați și în cod.

A0 și I2S sunt destul de fixe la locul lor:

deoarece A0 este pentru podul de rezistență (folosim diferența de curent pentru a ști care buton din 5 a fost apăsat - similar cu acest Instructables.

I2S are o codificare specifică pe care o puteți găsi aici

Pasul 8: Joacă câteva bucle cu prietenii tăi

Recomandat: