Sommario:

Melodia: 8 passaggi (con immagini)
Melodia: 8 passaggi (con immagini)

Video: Melodia: 8 passaggi (con immagini)

Video: Melodia: 8 passaggi (con immagini)
Video: Dance Monkey - BODY PERCUSSION per bambini e ragazzi - TONES AND I 2024, Dicembre
Anonim
Image
Image
Capire il flusso
Capire il flusso

Accanto ai tanti vantaggi e soluzioni tecnologiche che consentono il lavoro da casa, resta la difficoltà di formulare e creare un supporto vitale tra i collaboratori. MELODY è un dispositivo digitale-fisico che consente la creazione di brevi jam musicali collaborative. I colleghi coordinano il tempo e il dispositivo imposta una jam session con turni e suoni casuali diversi. Il primo partecipante imposta un ritmo specifico, dopo di che ogni partecipante aggiunge la propria sezione musicale corrispondente al ritmo impostato. Per rendere più facile agli utenti senza sottofondo musicale, il software li aiuta a tenere il passo campionando i loro clic e adattandosi al ritmo appropriato. La sessione termina dopo circa 3 minuti, quando tutti i partecipanti hanno finito di registrare la propria parte.

Come funziona?

Melody si basa sull'hardware ESP2866, che comunica con un server Node-Red tramite protocollo MQTT. Il dispositivo traduce le note del giocatore in una stringa di caratteri che viene inviata al server e dal server agli altri giocatori. Ciò consente a tutti di riprodurre e ascoltare la melodia senza interruzioni dalla propria connessione di rete.

Melody ha due indicatori visivi principali. La prima è una striscia LED che fa sapere al giocatore quando inizia il Loop e quando finisce e indica se è il turno del giocatore. Il secondo è un display a LED al centro del prodotto, che viene utilizzato per visualizzare visivamente la melodia esistente. Un conto alla rovescia da 3 a 1 indica di iniziare a suonare e un display dei tempi indica all'utente quando e come vuole contribuire alla melodia del gruppo. La registrazione viene salvata automaticamente nel cloud dell'azienda per un uso futuro.

Questo progetto è stato ideato da quattro studenti del Media innovation lab (MiLab) presso il Centro interdisciplinare Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar e Gad Stern. Con l'assistenza di Zvika Markfeld, Netta Ofer e Michal Leschinsky e la guida di Noa Morag e Oren Zuckerman.

grazie a Tom Granot per aver creato un ottimo istruttore che mi ha aiutato a imparare come implementare alcune delle cose qui (alcuni dei passaggi qui sono modellati su questo fantastico istruttore).

Forniture

  • stampante 3d
  • ESP8266
  • 7 pulsanti
  • Matrice LED 8X8
  • Striscia LED WS2812B
  • Amplificatore I2S
  • Jack audio femmina a 4 poli da 1/8" (3,5 mm)
  • Resistore 4X 1K
  • Resistenza 1X3K

Passaggio 1: comprendere il flusso

Capire il flusso
Capire il flusso
Capire il flusso
Capire il flusso

In questo progetto abbiamo cercato di affrontare alcuni problemi:

  1. Come possiamo farlo online, in modo che i giocatori possano giocare contemporaneamente?
  2. Come possiamo aggirare le latenze di Internet e creare un'esperienza senza interruzioni?
  3. Come possiamo far suonare bene la musica anche per le persone senza un background musicale?

Tempistica e serializzazione della musica

Per risolvere il primo problema abbiamo esaminato il protocollo MIDI e provato ad usarlo, ma abbiamo visto che è più robusto di quello di cui avevamo effettivamente bisogno, inoltre volevamo renderlo semplice in modo da poter costruire il primo prototipo funzionante. Quindi ci siamo ispirati al MIDI e abbiamo realizzato il nostro loop musicale rappresentato da una stringa di numeri (da 0-5) volte la dimensione dei loop per i musicisti (spiegheremo più avanti tutta la matematica musicale).

Nella musica, dividiamo i ritmi in battute musicali. Ogni battuta è fondamentalmente un piccolo segmento che scegliamo di usare 4/4 (che significa 4 battute in una battuta musicale) - il più comune.

Ogni battuta viene poi suddivisa in 4 finestre di campionamento così ogni nota suonata sarà automaticamente allineata ad una buona posizione e ci permetterà anche di rappresentare una canzone come una stringa di numeri da inviare al server.

Per essere amichevoli con i giocatori senza un background musicale abbiamo fatto tre cose:

  1. Limita il numero di chiavi per far sì che il giocatore si concentri su meno opzioni.
  2. Abbiamo scelto note sulla stessa scala che suonano bene insieme, quindi non ci sarà alcun suono di dissonanza.
  3. Ogni pressione è impostata sulla "finestra" del ritmo, quindi aliena la musica del lettore al ritmo

Protocolli di comunicazione

Quindi, dopo aver compreso la logica dietro la musica, come possiamo comunicarla tra i nostri musicisti?

per questo, utilizziamo MQTT, un protocollo di rete publish-subscribe che trasporta i messaggi tra i dispositivi.

ogni giocatore è iscritto a due argomenti: il ciclo (ottieni il ciclo più attuale) e il turno (ottieni l'id del giocatore attuale per scopi di sincronizzazione).

A sua volta quando un giocatore ha finito di suonare il brano premerà il tasto UP e il loop (quello aggiornato) sarà inviato al broker MQTT, che lo ritrasmetterà a tutti i giocatori sul canale del loop.

questo loop rimarrà "inattivo" fino al termine della riproduzione del loop corrente e quindi lo sostituirà. quindi sarà trasparente per il giocatore. inoltre, poiché il nuovo loop è attualmente salvato localmente sul dispositivo del lettore, non c'è latenza Internet per la musica, quindi abbiamo risolto il secondo problema.

Passaggio 2: impostazione del server - Ngrok

Impostazione del server - Ngrok
Impostazione del server - Ngrok
Impostazione del server - Ngrok
Impostazione del server - Ngrok

ngrok è un servizio di tunneling. Ci consente di esporre un servizio in esecuzione localmente (nel nostro caso, Node-RED) al mondo esterno, senza il fastidio di configurare un server o gestire i record DNS. Esegui semplicemente Node-RED sul tuo computer, quindi esegui ngrok sulla stessa porta su cui è in esecuzione Node-RED.

Ecco fatto: otterrai un URL che puoi utilizzare per accedere a Node-RED da qualsiasi parte del mondo, indipendentemente dalla rete a cui è connesso.

Installazione e configurazione

  1. Scarica ngrok per il tuo sistema operativo da qui.
  2. Segui il passaggio nella pagina di download, fino al passaggio "Fire it up".
  3. Nella fase "Fire it up", scambia 80 con 1883 e http con tcp come in,./ngrok tcp 1883 a seconda del tuo
  4. salvare l'URL e il numero di porta (ha visto nell'immagine) ci servirà, in seguito.

Passaggio 3: impostazione del server - Nodo rosso

Impostazione del server - Nodo-Rosso
Impostazione del server - Nodo-Rosso

La logica Server del progetto, Node-RED è un ambiente di programmazione visuale che permette di connettere vari software (e hardware!).

Qui abbiamo realizzato la logica della comunicazione tra tutti i giocatori (condivisione e ricezione dei loop e coordinamento dei turni)

Installazione di Node-Red

segui i seguenti passaggi per caricare il nostro flusso Node-RED sul tuo computer locale:

  1. Node-RED richiede Node.js, installalo da qui
  2. installa Node-RED stesso usando le istruzioni qui.

Ora che hai installato Node-RED, eseguilo utilizzando le istruzioni del passaggio precedente e conferma che puoi vedere una pagina canvas vuota. Dovrebbe trovarsi in

Ora dovrai importare il flusso che abbiamo usato per questo progetto, puoi trovarlo qui e premere semplicemente importa aggiungere il file JSON e premere Deploy.

Installazione di Node-Red:

se guardi l'immagine allegata a questo passaggio puoi vedere che abbiamo 2 "azioni" principali riceviamo un loop corrente da uno dei nostri giocatori e poi lo trasmettiamo a tutti gli altri giocatori. inoltre, trasmettiamo il nuovo turno a tutti i giocatori. quindi il gioco rimane sincronizzato.

Passaggio 4: impostazione del server - MQTT (Mosquitto)

Impostazione del server - MQTT (Mosquitto)
Impostazione del server - MQTT (Mosquitto)

Poiché Node-RED non dispone di un proprio broker MQTT e dovremo comunicare con i nostri sensori e attivatori tramite MQTT, utilizzeremo un broker MQTT dedicato. Poiché Node-RED consiglia Mosquitto, questo è quello che useremo. Vedi qui per alcune informazioni su MQTT e perché è spesso usato nei progetti IoT.

Installazione e configurazione

  1. Scarica Mosquitto da qui e installalo, tutto in base al tuo sistema operativo.
  2. Normalmente, dovresti seguire le istruzioni qui per connettere Node-RED a Mosquitto. Tuttavia, se hai utilizzato il nostro flusso, è già preconfigurato per te. Finché installi correttamente il flusso e Mosquitrro e Mosquitto viene eseguito sulla porta 1883 (su cui viene eseguito per impostazione predefinita), dovrebbe funzionare immediatamente.
  3. Nota che questo significa che il broker MQTT e il tuo server Node-RED vengono eseguiti sulla stessa macchina. Questo è utile per semplificare la comunicazione all'interno del sistema. Vedere la nota di seguito per ulteriori informazioni.

Monitoraggio del traffico MQTT

Ho usato MQTTfx per monitorare il traffico, è un ottimo strumento con una GUI molto semplice.

Passaggio 5: il codice

Il codice
Il codice

puoi trovare il codice in GitHub (con tutti i file di dati e il config.h)

Dipendenze:

prima di caricare il codice su esp2866 dovrai installare alcune librerie:

  1. libmad-8266 (decodifica la musica da SPIFF e in I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Carica i suoni sull'ESP usando SPIFF:

  1. segui questo grande istruibile.
  2. aggiungere la cartella dei dati alla directory del codice sorgente.
  3. Nell'IDE di Arduino in Strumenti cambia la dimensione della Flash in "4 MB (FS: 3 MB TOA: ~ 512 KB)"
  4. Anche in Strumenti premere Caricamento dati schizzo ESP2866

Impostazione dei parametri:

dopodiché vai al file config.h e aggiungi i dati richiesti come le credenziali WIFI e l'URL e la porta ngrok del passaggio precedente (controlla la foto allegata per riferimento).

p.s - Ho già aggiunto una funzione di connessione automatica per aiutarti a impostare il WIFI e i dati ngrok dal tuo smartphone, poiché era solo una prima prova di concetto, vorrei aggiungerla un giorno.

Imposta la quantità di giocatori che desideri (questo gioco funziona meglio per 2-3 giocatori e viene caricato con una serie di suoni per 2 giocatori). ma può essere facilmente regolato per ulteriori informazioni:

per ogni giocatore aggiungi un altro flusso nel nodo rosso per pubblicare un ciclo in un argomento specifico dell'utente.

inoltre, puoi modificare il suono musicale modificando questo array sui tuoi suoni personalizzati:

qui puoi vedere 3 tipi di strumenti (Chrods per il giocatore 0, Lead per il giocatore 1 e Basso per il giocatore 2)

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

Passaggio 6: stampa il modello 3D

Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D
Stampa il modello 3D

Per il primo passaggio, scarica l'STL e stampalo.

dopo aver tolto i supporti e magari un po' di carteggiatura (dipende dalla risoluzione della stampante)

dipingilo del colore desiderato

Passaggio 7: assemblaggio e saldatura

Assemblaggio e saldatura
Assemblaggio e saldatura

Quindi fondamentalmente qui è dove avviene la vera magia.

puoi seguire questi schemi e saldare tutto insieme.

ricorda che puoi cambiare la posizione dei PIN ricordati solo di cambiarlo anche nel codice.

l'A0 e l'I2S sono abbastanza fissi:

poiché A0 è per il ponte di resistori (usiamo la differenza di corrente per sapere quale pulsante dei 5 è stato premuto - simile a questo Instructables.

l'I2S ha una codifica specifica la trovi qui

Passaggio 8: riproduci alcuni loop con i tuoi amici

Consigliato: