Table des matières:

Mélodie : 8 étapes (avec photos)
Mélodie : 8 étapes (avec photos)

Vidéo: Mélodie : 8 étapes (avec photos)

Vidéo: Mélodie : 8 étapes (avec photos)
Vidéo: Mélodie pour débutants 2024, Juillet
Anonim
Image
Image
Comprendre le flux
Comprendre le flux

A côté des nombreux avantages et solutions technologiques qui permettent le travail à domicile, la difficulté de formuler et de créer un support de vie entre collègues demeure. MELODY est un dispositif numérique-physique qui permet la création de courts jams musicaux collaboratifs. Les collègues coordonnent le temps et l'appareil définit une jam session avec des virages et différents sons aléatoires. Le premier participant définit un rythme spécifique, après quoi chaque participant ajoute sa propre section musicale correspondant au rythme défini. Afin de faciliter la tâche des utilisateurs sans formation musicale, le logiciel les aide à suivre le rythme en échantillonnant leurs clics et en les ajustant au rythme approprié. La session se termine après environ 3 minutes lorsque tous les participants ont fini d'enregistrer leur partie.

Comment ça marche?

Melody est basé sur le matériel ESP2866, qui communique avec un serveur Node-Red via le protocole MQTT. L'appareil traduit les notes du joueur en une chaîne de caractères qui est envoyée au serveur et du serveur aux autres joueurs. Cela permet à tout le monde de jouer et d'entendre la mélodie sans interruption depuis sa connexion réseau.

Melody a deux principaux indicateurs visuels. Le premier est une bande LED qui permet au joueur de savoir quand la boucle commence et quand elle se termine et indique si c'est le tour du joueur. Le second est un affichage LED au centre du produit, qui est utilisé pour afficher visuellement la mélodie existante. Un compte à rebours de 3 à 1 indique de commencer à jouer et un affichage des horaires indique à l'utilisateur quand et comment elle souhaite contribuer à la mélodie du groupe. L'enregistrement est automatiquement enregistré dans le cloud de l'entreprise pour une utilisation future.

Ce projet a été conçu par quatre étudiants du Media innovation lab (MiLab) du Centre interdisciplinaire Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar et Gad Stern. Avec l'aide de Zvika Markfeld, Netta Ofer et Michal Leschinsky et les conseils de Noa Morag et Oren Zuckerman.

merci à Tom Granot pour avoir créé un excellent instructable qui m'a aidé à apprendre à mettre en œuvre certaines des choses ici (certaines des étapes ici sont calquées sur ce grand instructable).

Fournitures

  • Imprimante 3D
  • ESP8266
  • 7 boutons
  • Matrice LED 8X8
  • Bande LED WS2812B
  • Amplificateur I2S
  • Prise audio femelle 1/8" (3,5 mm) 4 pôles
  • Résistance 4X 1K
  • Résistance 1X3K

Étape 1: Comprendre le flux

Comprendre le flux
Comprendre le flux
Comprendre le flux
Comprendre le flux

Dans ce projet, nous avons essayé de résoudre certains problèmes:

  1. Comment pouvons-nous le faire en ligne, afin que les joueurs puissent jouer en même temps ?
  2. Comment contourner les latences Internet et créer une expérience fluide ?
  3. Comment pouvons-nous faire en sorte que la musique sonne bien même pour des personnes sans formation musicale ?

Timing et sérialisation de la musique

Afin de résoudre le premier problème, nous avons examiné le protocole MIDI et essayé de l'utiliser, mais nous avons vu qu'il est plus robuste que ce dont nous avions réellement besoin. Nous voulions également le rendre simple afin que nous puissions construire le premier prototype fonctionnel. Nous nous sommes donc inspirés du MIDI et avons fait notre boucle musicale représentée par une chaîne de nombres (de 0 à 5) fois la taille des boucles le temps des joueurs (nous expliquerons tout le calcul musical plus tard).

En musique, on divise les rythmes en mesures musicales. Chaque mesure est essentiellement un petit segment que nous choisissons d'utiliser 4/4 (c'est-à-dire 4 temps dans une mesure musicale) - le plus courant.

Chaque temps est ensuite divisé en 4 fenêtres d'échantillonnage afin que chaque note jouée soit automatiquement alignée sur une bonne position et nous permet également de représenter une chanson sous la forme d'une chaîne de chiffres à envoyer au serveur.

Afin d'être amicaux avec les joueurs sans formation musicale, nous avons fait trois choses:

  1. Limitez le nombre de touches pour que le joueur se concentre sur moins d'options.
  2. Nous avons choisi des notes sur la même gamme qui jouent bien ensemble afin qu'il n'y ait pas de son de dissonance.
  3. Chaque pression est réglée sur la "fenêtre" du rythme ainsi étranger le lecteur de musique au rythme

Protocoles de communication

Alors après avoir compris la logique derrière la musique, comment pouvons-nous la communiquer entre nos joueurs ?

pour cela, nous utilisons MQTT, un protocole réseau de publication-abonnement qui transporte les messages entre les appareils.

chaque joueur est abonné à deux sujets: la boucle (obtenir la boucle la plus récente) et le tour (obtenir l'identifiant du joueur actuel à des fins de synchronisation).

À son tour, lorsqu'un joueur a fini de jouer la mélodie, il appuie sur le bouton UP et la boucle (la mise à jour) sera envoyée au courtier MQTT, qui la retransmettra à tous les joueurs sur le canal de boucle.

cette boucle restera "dormante" jusqu'à la fin de la lecture de la boucle en cours, puis la remplacera. ainsi il sera transparent pour le joueur. De plus, comme la nouvelle boucle est actuellement enregistrée localement sur le lecteur, il n'y a pas de latence Internet pour la musique et nous avons donc résolu le deuxième problème.

Étape 2: Configuration du serveur - Ngrok

Configuration du serveur - Ngrok
Configuration du serveur - Ngrok
Configuration du serveur - Ngrok
Configuration du serveur - Ngrok

ngrok est un service de tunneling. Cela nous permet d'exposer un service exécuté localement (dans notre cas, Node-RED) au monde extérieur - sans avoir à configurer un serveur ou à gérer des enregistrements DNS. Vous exécutez simplement Node-RED sur votre ordinateur, puis exécutez ngrok sur le même port sur lequel Node-RED s'exécute.

C'est tout - vous obtiendrez une URL que vous pourrez utiliser pour accéder à Node-RED depuis n'importe où dans le monde, quel que soit le réseau auquel il est connecté.

Installation et configuration

  1. Téléchargez ngrok pour votre système d'exploitation à partir d'ici.
  2. Suivez l'étape sur la page de téléchargement, jusqu'à l'étape "Fire it up".
  3. Dans l'étape "Fire it up", remplacez le 80 par 1883 - et le http vers tcp comme dans,./ngrok tcp 1883 en fonction de votre
  4. enregistrer l'URL et le numéro de port (a vu dans l'image) nous en aurons besoin, plus tard.

Étape 3: Configuration du serveur - Node-Red

Configuration du serveur - Node-Red
Configuration du serveur - Node-Red

Logique serveur du projet, Node-RED est un environnement de programmation visuel qui permet de connecter divers logiciels (et matériels !).

Ici nous avons fait la logique de la communication entre tous les joueurs (partage et réception des boucles et coordination des tours)

Installation de Node-Red

suivez les étapes suivantes pour charger notre flux Node-RED sur votre ordinateur local:

  1. Node-RED nécessite Node.js, installez-le à partir d'ici
  2. installez Node-RED lui-même en suivant les instructions ici.

Maintenant que Node-RED est installé, exécutez-le en suivant les instructions de l'étape ci-dessus et validez, vous pouvez voir une page de canevas vide. Il devrait être situé dans

Vous devez maintenant importer le flux que nous avons utilisé pour ce projet, vous pouvez le trouver ici et appuyez simplement sur importer, ajoutez le fichier JSON et appuyez sur Déployer.

Installation de Node-Red:

si vous regardez l'image qui est jointe à cette étape vous pouvez voir que nous avons 2 "actions" principales nous recevons une boucle de courant d'un de nos joueurs et ensuite nous la transmettons à tous les autres joueurs. de plus, nous diffusons le nouveau tour à tous les joueurs. donc le jeu reste synchronisé.

Étape 4: Configuration du serveur - MQTT (Mosquitto)

Configuration du serveur - MQTT (Mosquitto)
Configuration du serveur - MQTT (Mosquitto)

Étant donné que Node-RED n'a pas son propre courtier MQTT et que nous devrons communiquer avec nos capteurs et activateurs via MQTT, nous utiliserons un courtier MQTT dédié. Puisque Node-RED recommande Mosquitto, c'est celui-ci que nous utiliserons. Cliquez ici pour obtenir des informations sur MQTT et pourquoi il est souvent utilisé dans les projets IoT.

Installation et configuration

  1. Téléchargez Mosquitto à partir d'ici et installez-le, le tout en fonction de votre système d'exploitation.
  2. Normalement, vous devez suivre les instructions ici pour connecter Node-RED à Mosquitto. Cependant, si vous avez utilisé notre flux, il est déjà pré-configuré pour vous. Tant que vous installez correctement le flux et Mosquitrro et que Mosquitto s'exécute sur le port 1883 (sur lequel il s'exécute par défaut), cela devrait fonctionner immédiatement.
  3. Notez que cela signifie que le courtier MQTT et votre serveur Node-RED s'exécutent sur la même machine. Ceci est utile pour simplifier la communication à l'intérieur du système. Voir la note ci-dessous pour plus d'informations.

Surveillance du trafic MQTT

J'ai utilisé MQTTfx pour surveiller le trafic, c'est un excellent outil avec une interface graphique très simple.

Étape 5: Le code

Le code
Le code

vous pouvez trouver le code dans GitHub (avec tous les fichiers de données et le config.h)

Dépendances:

avant de charger le code dans l'esp2866, vous devrez installer quelques bibliothèques:

  1. libmad-8266 (décoder la musique de SPIFF et dans I2S)
  2. EspMQTTClient
  3. ESP8266Wi-Fi
  4. Adafruit_NeoPixel

Téléchargez les sons sur l'ESP en utilisant SPIFF:

  1. suivez ce grand instructable.
  2. ajoutez le dossier de données au répertoire du code source.
  3. Dans l'IDE Arduino sous Outils, modifiez la taille de Flash en "4 Mo (FS: 3 Mo TOA: ~ 512 Ko)"
  4. Également sous Outils Appuyez sur ESP2866 Téléchargement de données d'esquisse

Réglage des paramètres:

après cela, accédez au fichier config.h et ajoutez les données requises telles que les informations d'identification WIFI et l'URL et le port ngrok de l'étape précédente (consultez la photo ci-jointe pour référence).

p.s - J'ai encore ajouté une fonction de connexion automatique pour vous aider à configurer les données WIFI et ngrok de votre smartphone, car ce n'était qu'une première preuve de concept, j'aimerais l'ajouter un jour.

Définissez le nombre de joueurs que vous souhaitez (ce jeu fonctionne mieux pour 2 à 3 joueurs et il est prêt à l'emploi avec une gamme de sons pour 2 joueurs). mais peut être facilement ajusté pour plus:

pour chaque joueur, ajoutez un autre flux dans le nœud rouge pour publier une boucle dans un sous un sujet spécifique à l'utilisateur.

aussi, vous pouvez éditer le son musical en canging ce tableau à vos sons personnalisés:

ici vous pouvez voir 3 types d'instruments (Chrods pour le joueur 0, Lead pour le joueur 1 et Bass pour le joueur 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"};

Étape 6: Imprimez le modèle 3D

Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D
Imprimer le modèle 3D

Pour la première étape, téléchargez les STL et imprimez-les.

après avoir retiré les supports et peut-être un peu de ponçage (selon la résolution de l'imprimante)

peindre à la couleur désirée

Étape 7: Assemblage et soudage

Assemblage et soudage
Assemblage et soudage

Donc, fondamentalement, c'est ici que la vraie magie se produit.

vous pouvez suivre ces schémas et tout souder ensemble.

N'oubliez pas que vous pouvez modifier la position des codes PIN, n'oubliez pas de le modifier également dans le code.

l'A0 et l'I2S sont assez fixes:

puisque l'A0 est pour le pont de résistance (nous utilisons la différence de courant pour savoir quel bouton sur les 5 a été enfoncé - similaire à ce Instructables.

l'I2S a un codage spécifique vous pouvez le trouver ici

Étape 8: Jouez des boucles avec vos amis

Conseillé: