Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Uz mnoge prednosti i tehnološka rješenja koja omogućuju rad od kuće, ostaje teškoća u formuliranju i stvaranju podrške za život među suradnicima. MELODY je digitalno-fizički uređaj koji omogućava stvaranje zajedničkih kratkih muzičkih džemova. Suradnici koordiniraju vrijeme i uređaj postavlja jam session sa skretanjima i različitim nasumičnim zvukovima. Prvi učesnik postavlja određeni ritam, nakon čega svaki učesnik dodaje svoju muzičku sekciju koja odgovara postavljenom ritmu. Kako bi korisnicima bez glazbene podloge olakšao rad, softver im pomaže u održavanju koraka uzorkovanjem njihovih klikova i prilagođavanjem odgovarajućem ritmu. Sesija se završava nakon otprilike 3 minute kada svi sudionici završe snimanje svog dijela.
Kako to radi?
Melody je zasnovana na ESP2866 hardveru, koji komunicira sa Node-Red serverom preko MQTT protokola. Uređaj prevodi bilješke igrača u niz znakova koji se šalju na poslužitelj, a s poslužitelja natrag ostalim igračima. Ovo omogućava svima da sviraju i čuju melodiju bez prekida mrežne veze.
Melodija ima dva glavna vizuelna indikatora. Prva je LED traka koja daje informaciju igraču kada počinje petlja i kada završava i pokazuje je li na redu igrač. Drugi je LED zaslon u središtu proizvoda, koji se koristi za vizualni prikaz postojeće melodije. Odbrojavanje od 3 do 1 označava početak sviranja, a prikaz vremena usmjerava korisnika kada i kako želi pridonijeti Melodiji grupe. Snimka se automatski sprema u oblak kompanije za buduću upotrebu.
Ovaj projekt osmislila su četiri studenta u laboratoriji za inovacije u medijima (MiLab) u interdisciplinarnom centru Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar i Gad Stern. Uz pomoć Zvike Markfeld, Nette Ofer i Michala Leschinskya te uz vodstvo Noe Morag i Orena Zuckermana.
hvala Tomu Granotu na stvaranju odličnog instruktora koji mi je pomogao da naučim kako implementirati neke stvari ovdje (neki od koraka ovdje su modelirani prema ovom odličnom uputstvu).
Supplies
- 3D štampač
- ESP8266
- 7 dugmadi
- 8X8 LED matrica
- WS2812B LED traka
- I2S pojačalo
- Ženski 3,5 -milimetarski 4 -polni audio priključak
- 4X 1K otpornik
- 1X3K otpornik
Korak 1: Razumevanje toka
U ovom smo projektu pokušali riješiti neka pitanja:
- Kako to možemo učiniti online, kako bi igrači mogli igrati istovremeno?
- Kako možemo zaobići internetske kašnjenja i stvoriti besprijekorno iskustvo?
- Kako možemo učiniti da muzika zvuči dobro čak i za ljude bez muzičke podloge?
Vremenski raspored i serijalizacija muzike
Kako bismo riješili prvi problem, pogledali smo MIDI protokol i pokušali ga koristiti, ali smo vidjeli da je robusniji od onoga što nam je zapravo bilo potrebno. Također smo zaista htjeli da to učinimo jednostavnim kako bismo mogli izgraditi prvi radni prototip. Stoga smo uzeli inspiraciju iz MIDI-ja i učinili našu muzičku petlju predstavljenom nizom brojeva (od 0-5) puta petlji veće od vremena igrača (kasnije ćemo objasniti svu muzičku matematiku).
U muzici dijelimo ritmove na muzičke trake. Svaki takt je u osnovi mali segment koji odabiremo 4/4 (što znači 4 takta u muzičkoj traci) - najčešći.
Svaki ritam se zatim dijeli na 4 prozora za uzorkovanje, tako da će se svaka odsvirana nota automatski poravnati na c dobar položaj, a također će nam omogućiti da predstavimo pjesmu kao niz brojeva za slanje na poslužitelj.
Kako bismo bili prijateljski raspoloženi prema igračima bez muzičke podloge, učinili smo tri stvari:
- Ograničite broj tipki kako bi se igrač usredotočio na manje opcija.
- Odabrali smo note iste ljestvice koje dobro sviraju tako da neće doći do disonantnog zvuka.
- Svaki pritisak je postavljen na "prozor" ritma, pa je muzika muzičara van ritma
Komunikacijski protokoli
Dakle, nakon što smo shvatili logiku koja stoji iza muzike, kako je možemo prenijeti između naših svirača?
za to koristimo MQTT, mrežni protokol za objavljivanje i pretplatu koji prenosi poruke između uređaja.
svaki igrač je pretplaćen na dvije teme: petlja (dobijate najaktuelniju petlju) i skretanje (dobija id trenutnog igrača radi sinhronizacije).
Zauzvrat, kada igrač završi sa sviranjem melodije, on/ona će pritisnuti tipku GORE i petlja (ažurirana) će biti poslana MQTT brokeru, koji će je prenijeti natrag svim igračima na kanalu petlje.
ova petlja će ostati "uspavana" sve dok se trenutna petlja ne završi s reprodukcijom, a zatim će je zamijeniti. tako će biti transparentno za igrača. također budući da je nova petlja trenutno spremljena lokalno na uređaju za reprodukciju, nema kašnjenja na internetu za muziku pa smo riješili drugi problem.
Korak 2: Postavljanje servera - Ngrok
ngrok je usluga tuneliranja. Omogućava nam da izložimo lokalno pokrenut servis (u našem slučaju, Node -RED) vanjskom svijetu - bez gnjavaže pri postavljanju servera ili bavljenju DNS zapisima. Jednostavno pokrenite Node-RED na računaru, a zatim pokrenite ngrok na istom portu na kojem radi Node-RED.
To je to - dobit ćete URL koji možete koristiti za pristup Node -RED -u sa bilo kojeg mjesta na svijetu, bez obzira na to s kojom mrežom je povezan.
Instalacija i konfiguracija
- Preuzmite ngrok za svoj operativni sistem odavde.
- Pratite korak na stranici za preuzimanje sve do koraka "Zapali".
- U koraku "Zapaljite ga" zamijenite 80 za 1883 - a http za tcp kao u./ngrok tcp 1883 ovisno o vašem
- spremite URL i broj porta (vidi se na slici), trebat će nam kasnije.
Korak 3: Postavljanje servera - Node -Red
Logika servera projekta, Node-RED je vizuelno programsko okruženje koje vam omogućava povezivanje različitih softvera (i hardvera!).
Ovdje smo napravili logiku komunikacije između svih igrača (dijeljenje i primanje petlji i koordiniranje okreta)
Instalacija Node-Red
slijedite ove korake za učitavanje našeg Node-RED toka na vaš lokalni računar:
- Node-RED zahtijeva Node.js, instalirajte ga odavde
- instalirajte sam Node-RED koristeći ovdje navedena uputstva.
Sada kada ste instalirali Node-RED, pokrenite ga koristeći upute na prethodnom koraku i potvrdite da možete vidjeti praznu stranicu sa platnom. Trebalo bi se nalaziti na
Sada ćete morati uvesti tok koji smo koristili za ovaj projekt, možete ga pronaći ovdje i samo pritisnite import dodaj JSON datoteku i pritisnite Deploy.
Instalacija Node-Red-a:
ako pogledate sliku koja je priložena ovom koraku, možete vidjeti da imamo 2 glavne "radnje", primamo trenutnu petlju od jednog od naših igrača, a zatim je prenosimo svim ostalim igračima. osim toga, emitujemo novi red svim igračima. tako da igra ostaje usklađena.
Korak 4: Postavljanje servera - MQTT (Mosquitto)
Budući da Node-RED nema svog MQTT brokera, pa ćemo morati komunicirati sa našim senzorima i aktivatorima preko MQTT-a, koristit ćemo namjenskog MQTT brokera. Budući da Node-RED preporučuje Mosquitto, ovo ćemo koristiti mi. Ovdje pogledajte neke informacije o MQTT -u i zašto se često koristi u IoT projektima.
Instalacija i konfiguracija
- Preuzmite Mosquitto odavde i instalirajte ga, sve u skladu s vašim operativnim sistemom.
- Obično biste morali slijediti upute ovdje za povezivanje Node-RED-a na Mosquitto. Međutim, ako ste koristili naš tok, on je već unaprijed konfiguriran za vas. Sve dok ispravno instalirate flow i Mosquitrro, a Mosquitto radi na portu 1883 (na kojem se pokreće prema zadanim postavkama), trebao bi raditi izvan okvira.
- Imajte na umu da to znači da MQTT posrednik i vaš Node-RED poslužitelj rade na istoj mašini. Ovo je korisno za pojednostavljivanje komunikacije unutar sistema. Za više informacija pogledajte donju napomenu.
Praćenje MQTT prometa
Koristio sam MQTTfx za praćenje prometa, to je odličan alat s vrlo jednostavnim grafičkim sučeljem.
Korak 5: Kôd
kôd možete pronaći u GitHubu (sa svim datotekama s podacima i datotekom config.h)
Zavisnosti:
prije učitavanja koda na esp2866 morate instalirati nekoliko biblioteka:
- libmad-8266 (dekodiranje muzike sa SPIFF-a u I2S)
- EspMQTTClient
- ESP8266WiFi
- Adafruit_NeoPixel
Prenesite zvukove u ESP koristeći SPIFF:
- slijedite ovu sjajnu uputu.
- dodajte mapu podataka u direktorij izvornog koda.
- U Arduino IDE -u pod Alati promijenite veličinu Flash -a u "4MB (FS: 3MB TOA: ~ 512KB)"
- Takođe u okviru Alati Pritisnite ESP2866 Sketch Data Upload
Podešavanje parametara:
nakon toga idite u datoteku config.h i dodajte potrebne podatke, poput WIFI vjerodajnica i ngrok URL -a i porta iz prethodnog koraka (provjerite priloženu fotografiju za referencu).
p.s-Još sam dodao funkciju automatskog povezivanja koja će vam pomoći da postavite WIFI i ngrok podatke sa svog pametnog telefona, budući da je to bio samo prvi dokaz koncepta, htio bih ga jednog dana dodati.
Odredite količinu igrača koju želite (ova igra najbolje funkcionira za 2-3 igrača i iz kutije je učitana nizom zvukova za 2 igrača). ali se lako može prilagoditi za više:
za svakog igrača dodajte još jedan tok u node-red-u da biste objavili petlju u okviru teme specifične za korisnika.
takođe, možete urediti muzički zvuk tako što ćete ovaj niz spojiti prema vašim prilagođenim zvucima:
ovdje možete vidjeti 3 vrste instrumenata (Chrods za igrača 0, Lead za igrača 1 i bas za igrača 2)
const char* staze [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"};
Korak 6: Odštampajte 3D model
Za prvi korak preuzmite STL i ispišite ih.
nakon uklanjanja nosača i možda malo brušenja (ovisno o rezoluciji pisača)
ofarbajte ga u željenu boju
Korak 7: Sklapanje i zavarivanje
Dakle, u osnovi se ovdje događa prava magija.
možete slijediti ove sheme i zavariti sve zajedno.
imajte na umu da možete promijeniti položaj PIN -a, samo ga zapamtite i u kodu.
A0 i I2S su prilično fiksirani:
budući da je A0 za otpornički most (koristimo razliku u struji da znamo koje je dugme od 5 pritisnuto - slično ovom Instructables.
I2S ima posebno kodiranje koje možete pronaći ovdje