Inhoudsopgave:

Melodie: 8 stappen (met afbeeldingen)
Melodie: 8 stappen (met afbeeldingen)

Video: Melodie: 8 stappen (met afbeeldingen)

Video: Melodie: 8 stappen (met afbeeldingen)
Video: Als Dit Niet Was Gefilmd Zou Niemand Het Geloven 2024, November
Anonim
Image
Image
De stroom begrijpen
De stroom begrijpen

Naast de vele voordelen en technologische oplossingen die thuiswerken mogelijk maken, blijft de moeilijkheid om levensondersteuning bij collega's te formuleren en te creëren. MELODY is een digitaal-fysiek apparaat dat het mogelijk maakt om gezamenlijke korte muzikale jams te creëren. Collega's coördineren de tijd en het apparaat zet een jamsessie in met beurten en verschillende willekeurige geluiden. De eerste deelnemer stelt een bepaald ritme in, waarna elke deelnemer zijn eigen muzikale gedeelte toevoegt dat overeenkomt met het ingestelde ritme. Om het voor gebruikers zonder muzikale achtergrond gemakkelijker te maken, helpt de software hen gelijke tred te houden door hun klikken te samplen en aan te passen aan het juiste ritme. De sessie eindigt na ongeveer 3 minuten wanneer alle deelnemers klaar zijn met het opnemen van hun deel.

Hoe werkt het?

Melody is gebaseerd op ESP2866-hardware, die via het MQTT-protocol communiceert met een Node-Red-server. Het apparaat vertaalt de aantekeningen van de speler in een reeks karakters die naar de server en van de server terug naar de andere spelers wordt gestuurd. Hierdoor kan iedereen het deuntje spelen en horen zonder onderbreking van hun netwerkverbinding.

Melody heeft twee belangrijke visuele indicatoren. De eerste is een LED-strip die de speler laat weten wanneer Loop begint en wanneer deze eindigt en aangeeft of de speler aan de beurt is. De tweede is een LED-display in het midden van het product, dat wordt gebruikt om het bestaande deuntje visueel weer te geven. Een aftelling van 3 tot 1 geeft aan dat ze beginnen te spelen en een timingweergave geeft de gebruiker aan wanneer en hoe ze wil bijdragen aan de melodie van de groep. De opname wordt automatisch opgeslagen in de cloud van het bedrijf voor toekomstig gebruik.

Dit project is ontworpen door vier studenten van het Media Innovation Lab (MiLab) van het interdisciplinaire Centrum Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar en Gad Stern. Met de hulp van Zvika Markfeld, Netta Ofer en Michal Leschinsky en de begeleiding van Noa Morag en Oren Zuckerman.

dank aan Tom Granot voor het maken van een geweldige instructable die me heeft geholpen om te leren hoe ik sommige dingen hier kan implementeren (sommige van de stappen hier zijn gemodelleerd naar deze geweldige instructable).

Benodigdheden

  • 3D-printer
  • ESP8266
  • 7 knoppen
  • 8X8 LED-matrix
  • WS2812B LED-strip
  • I2S versterker
  • Vrouwelijke 1/8" (3,5 mm) 4-polige audio-aansluiting
  • 4X 1K weerstand
  • 1X3K weerstand

Stap 1: De stroom begrijpen

De stroom begrijpen
De stroom begrijpen
De stroom begrijpen
De stroom begrijpen

In dit project hebben we geprobeerd een aantal problemen aan te pakken:

  1. Hoe kunnen we het online maken, zodat spelers tegelijkertijd kunnen spelen?
  2. Hoe kunnen we internetlatenties omzeilen en een naadloze ervaring creëren?
  3. Hoe kunnen we de muziek goed laten klinken, zelfs voor mensen zonder muzikale achtergrond?

Timing en serialisatie van de muziek

Om het eerste probleem op te lossen, hebben we naar het MIDI-protocol gekeken en geprobeerd het te gebruiken, maar we zagen dat het robuuster is dan wat we eigenlijk nodig hadden. We wilden het ook heel eenvoudig maken, zodat we het eerste werkende prototype kunnen bouwen. Dus lieten we ons inspireren door de MIDI en maakten we onze muzikale loop vertegenwoordigd door een reeks getallen (van 0-5) maal de loops-grootte tijd de spelers (we zullen alle muzikale wiskunde later uitleggen).

In muziek splitsen we de ritmes op in muzikale maten. Elke maat is in feite een klein segment, we kiezen ervoor om 4/4 te gebruiken (wat 4 beats in een muziekmaat betekent) - de meest voorkomende.

Elke beat wordt vervolgens opgesplitst in 4 bemonsteringsvensters, zodat elke gespeelde noot automatisch wordt uitgelijnd op een goede positie en ons ook in staat stelt een nummer weer te geven als een reeks getallen om naar de server te verzenden.

Om vriendelijk te zijn voor spelers zonder muzikale achtergrond hebben we drie dingen gedaan:

  1. Beperk het aantal toetsen zodat de speler zich op minder opties kan concentreren.
  2. We hebben noten op dezelfde schaal gekozen die goed samen spelen, zodat er geen dissonantiegeluid is.
  3. Elke druk wordt ingesteld op het "venster" van het ritme, waardoor de muziek van de speler zich vervreemdt van het ritme

Communicatieprotocollen

Dus als we de logica achter de muziek begrepen, hoe kunnen we deze dan tussen onze spelers communiceren?

daarvoor gebruiken we MQTT, een publish-subscribe netwerkprotocol dat berichten tussen apparaten transporteert.

elke speler is geabonneerd op twee onderwerpen: de lus (haal de meest actuele lus op) en de beurt (haalt de id van de huidige speler op voor synchronisatiedoeleinden).

Wanneer een speler klaar is met het spelen van het deuntje, drukt hij/zij op zijn beurt op de UP-knop en de lus (de bijgewerkte) wordt naar de MQTT-makelaar gestuurd, die deze terugstuurt naar alle spelers op het luskanaal.

deze lus blijft "sluimerend" totdat de huidige lus is afgespeeld en wordt dan vervangen. dus het zal transparant zijn voor de speler. ook omdat de nieuwe lus momenteel lokaal op het spelerapparaat wordt opgeslagen, is er geen internetlatentie voor de muziek en daarom hebben we het tweede probleem opgelost.

Stap 2: De server instellen - Ngrok

De server instellen - Ngrok
De server instellen - Ngrok
De server instellen - Ngrok
De server instellen - Ngrok

ngrok is een tunnelservice. Het stelt ons in staat om een lokaal draaiende service (in ons geval Node-RED) aan de buitenwereld bloot te stellen - zonder het gedoe van het opzetten van een server of omgaan met DNS-records. U voert eenvoudig Node-RED uit op uw computer en voert vervolgens ngrok uit op dezelfde poort waarop Node-RED wordt uitgevoerd.

Dat is alles - u krijgt een URL die u kunt gebruiken om overal ter wereld toegang te krijgen tot Node-RED, ongeacht met welk netwerk het is verbonden.

Installatie & Configuratie

  1. Download ngrok voor uw besturingssysteem vanaf hier.
  2. Volg de stap op de downloadpagina, tot de stap "Fire it up".
  3. In de "Fire it up step", verwisselt u de 80 voor 1883 - en de http naar tcp zoals in,./ngrok tcp 1883, afhankelijk van uw
  4. sla de URL en het poortnummer op (te zien in de afbeelding) die we later nodig hebben.

Stap 3: De server instellen - Node-Red

De server instellen - Node-Red
De server instellen - Node-Red

De serverlogica van het project, Node-RED is een visuele programmeeromgeving waarmee je verschillende software (en hardware!) kunt aansluiten.

Hier maakten we de logica van de communicatie tussen alle spelers (delen en ontvangen van de lussen en coördineren van de beurten)

Installatie van Node-Red

volg de volgende stappen om onze Node-RED-stroom op uw lokale computer te laden:

  1. Node-RED vereist Node.js, installeer het vanaf hier
  2. installeer Node-RED zelf met behulp van de instructies hier.

Nu u Node-RED hebt geïnstalleerd, voert u het uit met behulp van de instructies in de bovenstaande stap en valideert u dat u een lege canvaspagina kunt zien. Het zou zich moeten bevinden in

U moet nu de stroom importeren die we voor dit project hebben gebruikt, u kunt deze hier vinden en druk op importeren, voeg het JSON-bestand toe en druk op Deploy.

Installatie van Node-Red:

als je kijkt naar de afbeelding die bij deze stap is gevoegd, kun je zien dat we 2 belangrijke "acties" hebben, we ontvangen een huidige lus van een van onze spelers en sturen deze vervolgens naar alle andere spelers. daarnaast zenden we de nieuwe beurt uit naar alle spelers. zodat het spel synchroon blijft.

Stap 4: De server instellen - MQTT (Mosquitto)

De server instellen - MQTT (Mosquitto)
De server instellen - MQTT (Mosquitto)

Aangezien Node-RED geen eigen MQTT-broker heeft en we via MQTT met onze sensoren en activatoren moeten communiceren, gebruiken we een speciale MQTT-broker. Aangezien Node-RED Mosquitto aanbeveelt, is dit degene die we zullen gebruiken. Zie hier voor wat informatie over MQTT en waarom het vaak wordt gebruikt in IoT-projecten.

Installatie & Configuratie

  1. Download Mosquitto vanaf hier en installeer het, allemaal volgens uw besturingssysteem.
  2. Normaal gesproken moet je de instructies hier volgen om Node-RED met Mosquitto te verbinden. Als u echter onze stroom heeft gebruikt, is deze al voor u geconfigureerd. Zolang je de flow en Mosquitrro correct installeert, en Mosquitto draait op poort 1883 (waar het standaard op draait), zou het out-of-the-box moeten werken.
  3. Merk op dat dit betekent dat de MQTT-broker en uw Node-RED-server op dezelfde machine draaien. Dit is handig om de communicatie binnen het systeem te vereenvoudigen. Zie de opmerking hieronder voor meer informatie.

MQTT-verkeer volgen

Ik heb MQTTfx gebruikt om het verkeer te controleren, het is een geweldige tool met een zeer eenvoudige GUI.

Stap 5: De code

De code
De code

je kunt de code vinden in GitHub (met alle gegevensbestanden en de config.h)

afhankelijkheden:

voordat je de code in de esp2866 laadt, moet je een paar bibliotheken installeren:

  1. libmad-8266 (decodeer de muziek van SPIFF en in I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Upload de geluiden naar de ESP met behulp van SPIFF:

  1. volg deze geweldige instructable.
  2. voeg de gegevensmap toe aan de broncodemap.
  3. Wijzig in de Arduino IDE onder Tools de Flash-grootte in "4MB (FS:3MB TOA:~512KB)"
  4. Ook onder Tools Druk op ESP2866 Sketch Data Upload

De parameters instellen:

ga daarna naar het config.h-bestand en voeg de vereiste gegevens toe, zoals WIFI-inloggegevens en de ngrok-URL en poort uit de vorige stap (bekijk de bijgevoegde foto ter referentie).

p.s - Ik heb nog een auto-connect-functie toegevoegd om je te helpen bij het instellen van de WIFI- en ngrok-gegevens van je smartphone, aangezien het slechts een eerste proof of concept was, zou ik het ooit willen toevoegen.

Stel het aantal spelers in dat je wilt (dit spel werkt het beste voor 2-3 spelers en uit de doos is het geladen met een reeks geluiden voor 2 spelers). maar kan eenvoudig worden aangepast voor meer:

voeg voor elke speler een andere stroom toe in het knooppunt-rood om een lus in een onder een gebruikersspecifiek onderwerp te publiceren.

je kunt ook het muzikale geluid bewerken door deze array naar je eigen geluiden te wijzigen:

hier zie je 3 soorten instrumenten (Chrods voor speler 0, Lead voor speler 1 en Bas voor speler 2)

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

Stap 6: Druk het 3D-model af

Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken
Het 3D-model afdrukken

Download voor de eerste stap de STL en druk ze af.

na het verwijderen van de steunen en misschien een beetje schuren (afhankelijk van de resolutie van de printer)

verf het in de gewenste kleur

Stap 7: Assembleren en lassen

Assembleren en lassen
Assembleren en lassen

Dus eigenlijk is hier waar de echte magie plaatsvindt.

je kunt deze schema's volgen en alles aan elkaar lassen.

denk eraan dat u de positie van de pincodes kunt wijzigen, maar vergeet niet om deze ook in de code te wijzigen.

de A0 en de I2S zijn behoorlijk vast op hun plaats:

aangezien de A0 voor de weerstandsbrug is (we gebruiken het verschil in de stroom om te weten welke knop van de 5 is ingedrukt - vergelijkbaar met deze Instructables.

de I2S heeft een specifieke codering die je hier kunt vinden

Stap 8: Speel wat loops af met je vrienden

Aanbevolen: