Indholdsfortegnelse:

Melodi: 8 trin (med billeder)
Melodi: 8 trin (med billeder)

Video: Melodi: 8 trin (med billeder)

Video: Melodi: 8 trin (med billeder)
Video: Проведите ночь в пещере дождливого леса 8 часов- | потрескивание огня и звуки дождя 2024, November
Anonim
Image
Image
Forstå strømmen
Forstå strømmen

Udover de mange fordele og teknologiske løsninger, der gør det muligt at arbejde hjemmefra, er vanskeligheden ved at formulere og skabe livsstøtte blandt kolleger. MELODY er en digital-fysisk enhed, der muliggør oprettelse af korte musikalske jam. Medarbejdere koordinerer tiden, og enheden sætter en jam-session med vendinger og forskellige tilfældige lyde. Den første deltager sætter en bestemt rytme, hvorefter hver deltager tilføjer sit eget musikalske afsnit svarende til den indstillede rytme. For at gøre det lettere for brugere uden musikalsk baggrund hjælper softwaren dem med at holde trit ved at prøve deres klik og tilpasse sig den passende rytme. Sessionen slutter efter cirka 3 minutter, når alle deltagere er færdige med at optage deres del.

Hvordan virker det?

Melody er baseret på ESP2866 hardware, som kommunikerer med en Node-Red server via MQTT protokol. Enheden oversætter spillerens noter til en række tegn, der sendes til serveren og fra serveren tilbage til de andre spillere. Dette giver alle mulighed for at spille og høre melodien uden afbrydelse fra deres netværksforbindelse.

Melodi har to hovedvisuelle indikatorer. Den første er en LED -strip, der lader spilleren vide, hvornår Loop starter, og hvornår den slutter, og angiver, om det er spillerens tur. Den anden er et LED -display i midten af produktet, som bruges til visuelt at vise den eksisterende melodi. En nedtælling fra 3 til 1 angiver at begynde at spille, og et timings display viser brugeren, hvornår og hvordan hun vil bidrage til gruppens melodi. Optagelsen gemmes automatisk i virksomhedens sky til fremtidig brug.

Dette projekt blev designet af fire studerende på Media innovation lab (MiLab) på det tværfaglige Center Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar og Gad Stern. Med hjælp fra Zvika Markfeld, Netta Ofer og Michal Leschinsky og vejledning af Noa Morag og Oren Zuckerman.

tak til Tom Granot for at skabe en fantastisk instruerbar, der hjalp mig med at lære at implementere nogle af tingene her (nogle af trinene her er modelleret efter denne fantastiske instruerbare).

Forbrugsvarer

  • 3D printer
  • ESP8266
  • 7 knapper
  • 8X8 LED matrix
  • WS2812B LED Strip
  • I2S forstærker
  • Kvinde 1/8 "(3,5 mm) 4 -polet lydstik
  • 4X 1K modstand
  • 1X3K modstand

Trin 1: Forstå strømmen

Forstå strømmen
Forstå strømmen
Forstå strømmen
Forstå strømmen

I dette projekt forsøgte vi at løse nogle spørgsmål:

  1. Hvordan kan vi gøre det online, så spillere kan spille på samme tid?
  2. Hvordan kan vi omgå internetforsinkelser og skabe en problemfri oplevelse?
  3. Hvordan kan vi få musikken til at lyde godt, selv for mennesker uden musikalsk baggrund?

Timing og serialisering af musikken

For at løse det første problem kiggede vi på MIDI -protokollen og forsøgte at bruge den, men vi så, at den er mere robust end den, vi faktisk havde brug for, og vi ville virkelig gøre den enkel, så vi kan bygge den første fungerende prototype. Så vi tog inspiration fra MIDI og lavede vores musikalske loop repræsenteret af en række tal (fra 0-5) gange loops størrelsestid på spillerne (vi forklarer al den musikalske matematik senere).

I musik deler vi rytmerne i musikalske barer. Hver bar er i bund og grund et segment i lille tid, vi vælger at bruge 4/4 (hvilket betyder 4 slag i en musikalsk bar) - den mest almindelige.

Hvert slag opdeles derefter i 4 samplingsvinduer, så hver ton, der spilles, bliver automatisk justeret til en c god position og giver os også mulighed for at repræsentere en sang som en række tal, der skal sendes til serveren.

For at være venlige over for spillere uden musikalsk baggrund gjorde vi tre ting:

  1. Begræns antallet af taster for at få spilleren til at fokusere på færre muligheder.
  2. Vi valgte noter i samme skala, der spiller godt sammen, så der ikke kommer nogen dissonanslyd.
  3. Hvert tryk indstilles til rytmens "vindue" og fremmedgør derfor afspillerens musik til rytmen

Kommunikationsprotokoller

Så når vi har forstået logikken bag musikken, hvordan kan vi kommunikere det mellem vores spillere?

til det bruger vi MQTT, en netværksprotokol til publicering og abonnement, der transporterer meddelelser mellem enheder.

hver spiller abonnerer på to emner: loop (få den mest aktuelle loop) og turn (får id'en til den aktuelle spiller til synkroniseringsformål).

Når en spiller er færdig med at spille melodien, vil han/hun trykke på UP -knappen, og loop (den opdaterede) vil blive sendt til MQTT -mægleren, som sender den tilbage til alle spillerne på loop -kanalen.

denne loop vil forblive "i dvale", indtil den aktuelle loop er færdig med at spille og derefter erstatte den. det vil således være gennemsigtigt for spilleren. også da den nye loop i øjeblikket er gemt lokalt på afspillerenheden, er der ingen internetforsinkelse for musikken, så vi løste det andet problem.

Trin 2: Indstilling af serveren - Ngrok

Indstilling af serveren - Ngrok
Indstilling af serveren - Ngrok
Indstilling af serveren - Ngrok
Indstilling af serveren - Ngrok

ngrok er en tunneling service. Det giver os mulighed for at udsætte en lokalt kørende service (i vores tilfælde Node -RED) for omverdenen - uden besværet med at oprette en server eller beskæftige sig med DNS -poster. Du kører ganske enkelt Node-RED på din computer, og kører derefter ngrok på den samme port Node-RED kører.

Det er det - du får en URL, som du kan bruge til at få adgang til Node -RED overalt i verden, uanset hvilket netværk det er forbundet til.

Installation og konfiguration

  1. Download ngrok til dit operativsystem herfra.
  2. Følg trinnet på downloadsiden, indtil "Fire it up" -trinet.
  3. I "Fire it up step" skal du skifte 80 for 1883 - og http til tcp som i./ngrok tcp 1883 afhængigt af din
  4. gem webadressen og portnummeret (har set på billedet) vi skal bruge det senere.

Trin 3: Indstilling af serveren - Node -Red

Indstilling af serveren - Node -Red
Indstilling af serveren - Node -Red

Projektets serverlogik, Node-RED er et visuelt programmeringsmiljø, der giver dig mulighed for at forbinde forskellige software (og hardware!).

Her lavede vi logikken i kommunikationen mellem alle spillerne (deling og modtagelse af løkkerne og koordinering af svingene)

Installation af Node-Red

følg følgende trin for at indlæse vores Node-RED-flow på din lokale computer:

  1. Node-RED kræver Node.js, installer det herfra
  2. installer Node-RED selv ved hjælp af instruktionerne her.

Nu hvor du har Node-RED installeret, skal du køre det ved hjælp af instruktionerne på ovenstående trin og validere, at du kan se en tom lærredsside. Det skal være placeret på

Du skal nu importere det flow, vi brugte til dette projekt, du kan finde det her og bare trykke på import tilføj JSON -filen og tryk på Implementér.

Installation af Node-Red:

hvis du ser på billedet, der er knyttet til dette trin, kan du se, at vi har 2 hoved "handlinger", vi modtager en strømsløjfe fra en af vores spillere, og derefter sender vi det til alle de andre spillere. derudover sender vi den nye drejning til alle spillerne. så spillet forbliver synkroniseret.

Trin 4: Indstilling af serveren - MQTT (Mosquitto)

Indstilling af serveren - MQTT (Mosquitto)
Indstilling af serveren - MQTT (Mosquitto)

Da Node-RED ikke har sin egen MQTT-mægler, og vi bliver nødt til at kommunikere med vores sensorer og aktivatorer over MQTT, bruger vi en dedikeret MQTT-mægler. Da Node-RED anbefaler Mosquitto, er det denne, vi vil bruge. Se her for nogle oplysninger om MQTT, og hvorfor det ofte bruges i IoT -projekter.

Installation og konfiguration

  1. Download Mosquitto herfra og installer det, alt efter dit operativsystem.
  2. Normalt skal du følge instruktionerne her for at forbinde Node-RED til Mosquitto. Men hvis du brugte vores flow, er det allerede forudkonfigureret til dig. Så længe du installerer flowet og Mosquitrro korrekt, og Mosquitto kører på port 1883 (som det kører som standard), bør det fungere ud af boksen.
  3. Bemærk, at dette betyder, at MQTT-mægleren og din Node-RED-server kører på den samme maskine. Dette er nyttigt til at forenkle kommunikationen inde i systemet. Se notatet herunder for mere information.

Overvågning af MQTT -trafik

Jeg brugte MQTTfx til at overvåge trafikken, det er et fantastisk værktøj med en meget enkel GUI.

Trin 5: Koden

Koden
Koden

du kan finde koden i GitHub (med alle datafiler og config.h)

Afhængigheder:

Inden du indlæser koden i esp2866, skal du installere et par biblioteker:

  1. libmad-8266 (afkode musikken fra SPIFF og ind i I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Upload lydene til ESP ved hjælp af SPIFF:

  1. følg denne store instruerbare.
  2. tilføj datamappen til kildekodemappen.
  3. I Arduino IDE under Værktøjer ændres Flash -størrelsen til "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Også under Værktøjer Tryk på ESP2866 Sketch Data Upload

Indstilling af parametre:

derefter gå til filen config.h og tilføj de nødvendige data, såsom WIFI -legitimationsoplysninger og ngrok -URL'en og porten fra det foregående trin (tjek det vedhæftede foto for reference).

p.s-Jeg har endnu tilføjet en auto-connect-funktion til at hjælpe dig med at indstille WIFI- og ngrok-data fra din smartphone, da det bare var et første bevis på konceptet, vil jeg gerne tilføje det en dag.

Indstil den mængde spiller, du ønsker (dette spil fungerer bedst for 2-3 spillere, og ud af boksen er det fyldt med en række lyde til 2 spillere). men kan let justeres for mere:

for hver spiller tilføj et andet flow i knuden-rød for at offentliggøre en loop i et under et bruger-specifikt emne.

også kan du redigere den musikalske lyd ved at cangere denne matrix til dine brugerdefinerede lyde:

her kan du se 3 slags instrumenter (Chrods for player 0, Lead for player 1 og Bass for player 2)

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

Trin 6: Udskriv 3D -modellen

Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen
Udskriv 3D -modellen

For det første trin skal du downloade STL og udskrive dem.

efter fjernelse af understøtningerne og måske en lille smule slibning (afhængigt af printerens opløsning)

male den til den ønskede farve

Trin 7: Samling og svejsning

Samling og svejsning
Samling og svejsning

Så grundlæggende er det her, den virkelige magi sker.

du kan følge disse skemaer og svejse alt sammen.

Husk, at du kan ændre placeringen af PIN -koder, bare husk også at ændre den i koden.

A0 og I2S er ret fast på plads:

da A0 er til modstandsbroen (vi bruger forskellen i strømmen til at vide, hvilken knap ud af 5 der blev trykket på - svarende til denne Instructables.

I2S har en specifik kodning, du kan finde den her

Trin 8: Spil nogle sløjfer med dine venner

Anbefalede: