Innehållsförteckning:

Melodi: 8 steg (med bilder)
Melodi: 8 steg (med bilder)

Video: Melodi: 8 steg (med bilder)

Video: Melodi: 8 steg (med bilder)
Video: Staysman & Lazz - En godt stekt pizza 2024, Juli
Anonim
Image
Image
Förstå flödet
Förstå flödet

Förutom de många fördelar och tekniska lösningar som möjliggör arbete hemifrån, kvarstår svårigheten att formulera och skapa livsstöd bland arbetskamrater. MELODY är en digital-fysisk enhet som möjliggör skapande av korta musikaliska sylt. Medarbetare samordnar tiden och enheten ställer in en jamsession med varv och olika slumpmässiga ljud. Den första deltagaren sätter en specifik rytm, varefter varje deltagare lägger till sin egen musikaliska sektion som motsvarar den uppsatta rytmen. För att göra det enklare för användare utan musikalisk bakgrund hjälper programvaran dem att hålla jämna steg genom att sampla sina klick och anpassa sig till lämplig rytm. Sessionen avslutas efter cirka 3 minuter när alla deltagare har spelat in sin del.

Hur fungerar det?

Melody är baserad på ESP2866-hårdvara, som kommunicerar med en Node-Red-server via MQTT-protokoll. Enheten översätter spelarens anteckningar till en rad tecken som skickas till servern och från servern tillbaka till de andra spelarna. Detta gör att alla kan spela och höra låten utan avbrott från sin nätverksanslutning.

Melodi har två huvudvisuella indikatorer. Den första är en LED -remsa som låter spelaren veta när Loop startar och när den slutar och indikerar om det är spelarens tur. Den andra är en LED -display i mitten av produkten, som används för att visuellt visa den befintliga låten. En nedräkning från 3 till 1 indikerar att börja spela och en tidsvisning visar användaren när och hur hon vill bidra till gruppens melodi. Inspelningen sparas automatiskt i företagets moln för framtida bruk.

Detta projekt designades av fyra studenter vid Media innovation lab (MiLab) vid det tvärvetenskapliga centret Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar och Gad Stern. Med hjälp av Zvika Markfeld, Netta Ofer och Michal Leschinsky och vägledning av Noa Morag och Oren Zuckerman.

tack till Tom Granot för att skapa en bra instruerbar som hjälpte mig att lära mig hur man implementerar några av sakerna här (några av stegen här är modellerade efter denna fantastiska instruerbara).

Tillbehör

  • 3d skrivare
  • ESP8266
  • 7 knappar
  • 8X8 LED -matris
  • WS2812B LED -remsa
  • I2S förstärkare
  • 3,5 mm kvinnlig 1/8 "(4 mm) ljuduttag
  • 4X 1K motstånd
  • 1X3K motstånd

Steg 1: Förstå flödet

Förstå flödet
Förstå flödet
Förstå flödet
Förstå flödet

I detta projekt försökte vi ta itu med några frågor:

  1. Hur kan vi göra det online så att spelarna kan spela samtidigt?
  2. Hur kan vi gå runt internet latenser och skapa en sömlös upplevelse?
  3. Hur kan vi få musiken att låta bra även för personer utan musikalisk bakgrund?

Timing och serialisering av musiken

För att lösa det första problemet tittade vi på MIDI -protokollet och försökte använda det, men vi såg att det är mer robust än vad vi faktiskt behövde också vi ville verkligen göra det enkelt så att vi kan bygga den första fungerande prototypen. Så vi tog inspiration från MIDI och gjorde vår musikaliska loop representerad av en rad nummer (från 0-5) gånger looparnas storlek tid spelarna (vi kommer att förklara all musikalisk matematik senare).

Inom musik delar vi rytmerna i musikaliska barer. Varje takt är i princip ett litet segment vi väljer att använda 4/4 (vilket betyder 4 slag i en musikalisk bar) - den vanligaste.

Varje takt delas sedan upp i fyra samplingsfönster så varje ton som spelas kommer att automatiskt justeras till en c -position och låter oss också representera en låt som en sträng med nummer som ska skickas till servern.

För att vara vänliga mot spelare utan musikalisk bakgrund gjorde vi tre saker:

  1. Begränsa antalet nycklar för att få spelaren att fokusera på färre alternativ.
  2. Vi valde noter i samma skala som spelar bra tillsammans så det kommer inte att finnas något dissonansljud.
  3. Varje tryckning är inställd på rytmens "fönster", vilket gör att spelarmusiken främmas för rytmen

Kommunikationsprotokoll

Så när vi förstod logiken bakom musiken, hur kan vi kommunicera den mellan våra spelare?

för det använder vi MQTT, ett nätverksprotokoll för publicera-prenumerera som transporterar meddelanden mellan enheter.

varje spelare prenumererar på två ämnen: loop (få den mest aktuella loop) och turn (får id för den aktuella spelaren för synkronisering).

I sin tur när en spelare är klar med att spela melodin kommer han/hon att trycka på UPP -knappen och slingan (den uppdaterade) kommer att skickas till MQTT -mäklaren, som skickar tillbaka den till alla spelare på loopkanalen.

den här slingan kommer att förbli "vilande" tills den nuvarande slingan är klar och sedan ersätta den. så det kommer att vara transparent för spelaren. också eftersom den nya slingan för närvarande sparas lokalt på spelarenheten finns det ingen internet latens för musiken och så löste vi det andra problemet.

Steg 2: Ställa in servern - Ngrok

Ställa in servern - Ngrok
Ställa in servern - Ngrok
Ställa in servern - Ngrok
Ställa in servern - Ngrok

ngrok är en tunneltjänst. Det tillåter oss att exponera en lokalt fungerande tjänst (i vårt fall Node -RED) för omvärlden - utan krångel med att skapa en server eller hantera DNS -poster. Du kör helt enkelt Node-RED på din dator och kör sedan ngrok på samma port Node-RED körs.

Det är det - du får en URL som du kan använda för att få åtkomst till Node -RED var som helst i världen, oavsett vilket nätverk den är ansluten till.

Installation och konfiguration

  1. Ladda ner ngrok för ditt operativsystem härifrån.
  2. Följ steget på nedladdningssidan fram till steget "Släck upp".
  3. I "Fire it up step", byt 80 för 1883 - och http till tcp som i,./ngrok tcp 1883 beroende på din
  4. spara URL och portnummer (har sett på bilden) vi kommer att behöva det senare.

Steg 3: Ställa in servern - nod -röd

Inställning av servern - nod -röd
Inställning av servern - nod -röd

Projektets serverlogik, Node-RED är en visuell programmeringsmiljö som låter dig ansluta olika program (och hårdvara!).

Här gjorde vi logiken i kommunikationen mellan alla spelare (dela och ta emot slingorna och koordinera svängarna)

Installation av Node-Red

följ följande steg för att ladda vårt Node-RED-flöde på din lokala dator:

  1. Node-RED kräver Node.js, installera det härifrån
  2. installera Node-RED själv med instruktionerna här.

Nu när du har Node-RED installerat, kör det med instruktionerna i steget ovan och bekräfta att du kan se en tom canvas-sida. Den bör finnas på

Du måste nu importera flödet som vi använde för det här projektet. Du kan hitta det här och bara trycka på import lägg till JSON -filen och tryck på Distribuera.

Installation av Node-Red:

om du tittar på bilden som är bifogad till detta steg kan du se att vi har två huvudsakliga "åtgärder" vi får en strömslinga från en av våra spelare och sedan överför vi den till alla andra spelare. dessutom sänder vi den nya vändningen till alla spelare. så spelet förblir synkroniserat.

Steg 4: Ställa in servern - MQTT (Mosquitto)

Ställa in servern - MQTT (Mosquitto)
Ställa in servern - MQTT (Mosquitto)

Eftersom Node-RED inte har en egen MQTT-mäklare, och vi kommer att behöva kommunicera med våra sensorer och aktivatorer via MQTT, använder vi en dedikerad MQTT-mäklare. Eftersom Node-RED rekommenderar Mosquitto är det här vi kommer att använda. Se här för lite information om MQTT och varför det ofta används i IoT -projekt.

Installation och konfiguration

  1. Ladda ner Mosquitto härifrån och installera det, allt enligt ditt operativsystem.
  2. Normalt måste du följa instruktionerna här för att ansluta Node-RED till Mosquitto. Men om du använde vårt flöde är det redan förkonfigurerat för dig. Så länge du installerar flödet och Mosquitrro på rätt sätt och Mosquitto körs på port 1883 (som det körs som standard) bör det fungera ur lådan.
  3. Observera att detta betyder att MQTT-mäklaren och din Node-RED-server körs på samma dator. Detta är användbart för att förenkla kommunikationen inuti systemet. Se anteckningen nedan för mer information.

Övervakning av MQTT -trafik

Jag använde MQTTfx för att övervaka trafiken, det är ett bra verktyg med ett mycket enkelt GUI.

Steg 5: Koden

Koden
Koden

du kan hitta koden i GitHub (med alla datafiler och config.h)

Beroenden:

innan du laddar koden till esp2866 måste du installera några bibliotek:

  1. libmad-8266 (avkoda musiken från SPIFF och till I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Ladda upp ljuden till ESP med SPIFF:

  1. följ denna stora instruerbara.
  2. lägg till datamappen i källkodskatalogen.
  3. I Arduino IDE under Verktyg ändra Flash -storlek till "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Också under Verktyg Tryck på ESP2866 Sketch Data Upload

Inställning av parametrar:

gå sedan till config.h -filen och lägg till nödvändig data, till exempel WIFI -referenser och ngrok -URL: en och porten från föregående steg (kolla bifogat foto för referens).

PS-Jag har ännu lagt till en automatisk anslutningsfunktion som hjälper dig att ställa in WIFI- och ngrok-data från din smarttelefon, eftersom det bara var ett första bevis på konceptet skulle jag vilja lägga till det någon dag.

Ställ in hur mycket spelare du vill (det här spelet fungerar bäst för 2-3 spelare och ur lådan laddas det med en rad ljud för 2 spelare). men kan enkelt justeras för mer:

för varje spelare lägg till ytterligare ett flöde i noden-röd för att publicera en loop i ett under ett användarspecifikt ämne.

Du kan också redigera det musikaliska ljudet genom att ändra denna matris till dina egna ljud:

här kan du se tre typer av instrument (Chrods för spelare 0, Lead för spelare 1 och bas för spelare 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"};

Steg 6: Skriv ut 3D -modellen

Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen
Skriv ut 3D -modellen

För det första steget, ladda ner STL och skriv ut dem.

efter att ta bort stöden och kanske lite slipning (beroende på skrivarens upplösning)

måla den till önskad färg

Steg 7: Montering och svetsning

Montering och svetsning
Montering och svetsning

Så i grunden är det här den verkliga magin händer.

du kan följa dessa scheman och svetsa ihop allt.

tänk på att du kan ändra PIN -koden, kom ihåg att ändra den i koden också.

A0 och I2S är ganska fasta på plats:

eftersom A0 är för motståndsbryggan (vi använder skillnaden i strömmen för att veta vilken knapp av 5 som trycktes in - liknande denna Instructables.

I2S har en specifik kodning du hittar den här

Steg 8: Spela några loopar med dina vänner

Rekommenderad: