Tabla de contenido:

Melodía: 8 pasos (con imágenes)
Melodía: 8 pasos (con imágenes)

Video: Melodía: 8 pasos (con imágenes)

Video: Melodía: 8 pasos (con imágenes)
Video: 8 notas fáciles para flauta Dulce. Con audio e imágenes explicativas. 2024, Mes de julio
Anonim
Image
Image
Entendiendo el Flujo
Entendiendo el Flujo

Junto a las múltiples ventajas y soluciones tecnológicas que permiten trabajar desde casa, persiste la dificultad de formular y crear soporte vital entre los compañeros de trabajo. MELODY es un dispositivo físico-digital que permite la creación de breves improvisaciones musicales colaborativas. Los compañeros de trabajo coordinan el tiempo y el dispositivo establece una jam session con giros y diferentes sonidos aleatorios. El primer participante establece un ritmo específico, después de lo cual cada participante agrega su propia sección musical correspondiente al ritmo establecido. Para que sea más fácil para los usuarios sin antecedentes musicales, el software les ayuda a mantener el ritmo muestreando sus clics y ajustándose al ritmo apropiado. La sesión termina después de unos 3 minutos cuando todos los participantes han terminado de grabar su parte.

¿Como funciona?

Melody se basa en el hardware ESP2866, que se comunica con un servidor Node-Red a través del protocolo MQTT. El dispositivo traduce las notas del jugador en una cadena de caracteres que se envía al servidor y desde el servidor a los otros jugadores. Esto permite que todos puedan tocar y escuchar la melodía sin interrupción de su conexión de red.

Melody tiene dos indicadores visuales principales. La primera es una tira de LED que le permite al jugador saber cuándo comienza el bucle y cuándo termina e indica si es el turno del jugador. El segundo es una pantalla LED en el centro del producto, que se utiliza para mostrar visualmente la melodía existente. Una cuenta regresiva de 3 a 1 indica que debe comenzar a jugar y una pantalla de tiempos indica al usuario cuándo y cómo quiere contribuir a la melodía del grupo. La grabación se guarda automáticamente en la nube de la empresa para su uso futuro.

Este proyecto fue diseñado por cuatro estudiantes del laboratorio de innovación de medios (MiLab) del Centro interdisciplinario Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar y Gad Stern. Con la ayuda de Zvika Markfeld, Netta Ofer y Michal Leschinsky y la orientación de Noa Morag y Oren Zuckerman.

gracias a Tom Granot por crear un excelente instructivo que me ayudó a aprender cómo implementar algunas de las cosas aquí (algunos de los pasos aquí están modelados a partir de este excelente instructivo).

Suministros

  • impresora 3d
  • ESP8266
  • 7 botones
  • Matriz LED 8X8
  • Tira de LED WS2812B
  • Amplificador I2S
  • Conector de audio de 4 polos hembra de 1/8 "(3,5 mm)
  • Resistencia 4X 1K
  • Resistencia 1X3K

Paso 1: comprender el flujo

Entendiendo el Flujo
Entendiendo el Flujo
Entendiendo el Flujo
Entendiendo el Flujo

En este proyecto intentamos abordar algunos problemas:

  1. ¿Cómo podemos hacerlo en línea para que los jugadores puedan jugar al mismo tiempo?
  2. ¿Cómo podemos sortear las latencias de Internet y crear una experiencia perfecta?
  3. ¿Cómo podemos hacer que la música suene bien incluso para personas sin experiencia musical?

Sincronización y serialización de la música

Para resolver el primer problema, miramos el protocolo MIDI e intentamos usarlo, pero vimos que es más robusto de lo que realmente necesitábamos y también queríamos hacerlo simple para poder construir el primer prototipo funcional. Así que nos inspiramos en el MIDI e hicimos nuestro bucle musical representado por una cadena de números (del 0 al 5) multiplicado por el tamaño del bucle por los jugadores (explicaremos todas las matemáticas musicales más adelante).

En música, dividimos los ritmos en barras musicales. Cada compás es básicamente un segmento pequeño que elegimos usar 4/4 (es decir, 4 tiempos en un compás musical), el más común.

Luego, cada tiempo se divide en 4 ventanas de muestreo para que cada nota tocada se alinee automáticamente a una buena posición de c y también nos permita representar una canción como una cadena de números para enviar al servidor.

Para ser amigables con los jugadores sin experiencia musical, hicimos tres cosas:

  1. Limite la cantidad de teclas para que el jugador se concentre en menos opciones.
  2. Elegimos notas en la misma escala que se reproducen bien juntas para que no haya ningún sonido de disonancia.
  3. Cada pulsación se establece en la "ventana" del ritmo, por lo que la música del jugador se aliena al ritmo.

Protocolos de comunicacion

Entonces, una vez que entendemos la lógica detrás de la música, ¿cómo podemos comunicarla entre nuestros jugadores?

para eso, usamos MQTT, un protocolo de red de publicación-suscripción que transporta mensajes entre dispositivos.

cada jugador está suscrito a dos temas: el bucle (obtener el bucle más actual) y el turno (obtiene la identificación del jugador actual con fines de sincronización).

En su turno, cuando un jugador termine de tocar la melodía, presionará el botón ARRIBA y el bucle (el actualizado) se enviará al corredor de MQTT, que lo transmitirá a todos los jugadores en el canal de bucle.

este bucle permanecerá "inactivo" hasta que el bucle actual termine de reproducirse y luego lo reemplazará. por lo tanto, será transparente para el jugador. Además, dado que el nuevo bucle se guarda localmente en el dispositivo del reproductor, no hay latencia de Internet para la música, por lo que resolvimos el segundo problema.

Paso 2: Configuración del servidor - Ngrok

Configuración del servidor - Ngrok
Configuración del servidor - Ngrok
Configuración del servidor - Ngrok
Configuración del servidor - Ngrok

ngrok es un servicio de tunelización. Nos permite exponer un servicio que se ejecuta localmente (en nuestro caso, Node-RED) al mundo exterior, sin la molestia de configurar un servidor o tratar con registros DNS. Simplemente ejecute Node-RED en su computadora y luego ejecute ngrok en el mismo puerto en el que se ejecuta Node-RED.

Eso es todo: obtendrá una URL que puede usar para acceder a Node-RED desde cualquier parte del mundo, independientemente de la red a la que esté conectado.

Instalación y configuración

  1. Descargue ngrok para su sistema operativo desde aquí.
  2. Siga el paso en la página de descarga, hasta el paso "Enciéndalo".
  3. En el paso "Enciéndalo", cambie el 80 por 1883 - y el http por tcp como en,./ngrok tcp 1883 dependiendo de su
  4. Guarde la URL y el número de puerto (que ha visto en la imagen) lo necesitaremos, más adelante.

Paso 3: Configuración del servidor - Node-Red

Configuración del servidor - Node-Red
Configuración del servidor - Node-Red

La lógica del servidor del proyecto, Node-RED es un entorno de programación visual que le permite conectar varios software (¡y hardware!).

Aquí hicimos la lógica de la comunicación entre todos los jugadores (compartiendo y recibiendo los bucles y coordinando los giros)

Instalación de Node-Red

siga los siguientes pasos para cargar nuestro flujo Node-RED en su computadora local:

  1. Node-RED requiere Node.js, instálelo desde aquí
  2. instale Node-RED usando las instrucciones aquí.

Ahora que tiene Node-RED instalado, ejecútelo siguiendo las instrucciones del paso anterior y valide que pueda ver una página de lienzo vacía. Debe estar ubicado en

Ahora necesitará importar el flujo que usamos para este proyecto, puede encontrarlo aquí y simplemente presionar importar, agregar el archivo JSON y presionar Implementar.

Instalación de Node-Red:

si miras la imagen que se adjunta a este paso, puedes ver que tenemos 2 "acciones" principales, recibimos un bucle actual de uno de nuestros jugadores y luego lo transmitimos a todos los demás jugadores. Además, retransmitimos el nuevo turno a todos los jugadores. para que el juego se mantenga sincronizado.

Paso 4: Configuración del servidor - MQTT (Mosquitto)

Configuración del servidor - MQTT (Mosquitto)
Configuración del servidor - MQTT (Mosquitto)

Dado que Node-RED no tiene su propio agente MQTT, y necesitaremos comunicarnos con nuestros sensores y activadores a través de MQTT, usaremos un agente MQTT dedicado. Dado que Node-RED recomienda Mosquitto, este es el que usaremos. Consulte aquí para obtener información sobre MQTT y por qué se usa a menudo en proyectos de IoT.

Instalación y configuración

  1. Descarga Mosquitto desde aquí e instálalo, todo según tu sistema operativo.
  2. Normalmente, deberá seguir las instrucciones aquí para conectar Node-RED a Mosquitto. Sin embargo, si usó nuestro flujo, ya está preconfigurado para usted. Siempre que instale el flujo y Mosquitrro correctamente, y Mosquitto se ejecute en el puerto 1883 (en el que se ejecuta de forma predeterminada), debería funcionar de inmediato.
  3. Tenga en cuenta que esto significa que el agente MQTT y su servidor Node-RED se ejecutan en la misma máquina. Esto es útil para simplificar la comunicación dentro del sistema. Consulte la nota a continuación para obtener más información.

Supervisión del tráfico MQTT

Usé MQTTfx para monitorear el tráfico, es una gran herramienta con una GUI muy simple.

Paso 5: el código

El código
El código

puede encontrar el código en GitHub (con todos los archivos de datos y el config.h)

Dependencias:

antes de cargar el código en el esp2866, deberá instalar algunas bibliotecas:

  1. libmad-8266 (decodifica la música de SPIFF y en I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Cargue los sonidos al ESP usando SPIFF:

  1. sigue este gran instructable.
  2. agregue la carpeta de datos al directorio del código fuente.
  3. En el IDE de Arduino, en Herramientas, cambie el tamaño de Flash a "4MB (FS: 3MB TOA: ~ 512KB)"
  4. También en Herramientas Presione Carga de datos de boceto ESP2866

Configuración de los parámetros:

después de eso, vaya al archivo config.h y agregue los datos requeridos, como las credenciales WIFI y la URL y el puerto ngrok del paso anterior (verifique la foto adjunta como referencia).

p.s: todavía he agregado una función de conexión automática para ayudarlo a configurar los datos WIFI y ngrok desde su teléfono inteligente, ya que fue solo una primera prueba de concepto, me gustaría agregarla algún día.

Establezca la cantidad de jugadores que desee (este juego funciona mejor para 2-3 jugadores y, listo para usar, está cargado con una variedad de sonidos para 2 jugadores). pero se puede ajustar fácilmente para más:

para cada jugador, agregue otro flujo en el nodo rojo para publicar un bucle en un tema específico del usuario.

Además, puede editar el sonido musical cambiando esta matriz a sus sonidos personalizados:

aquí puede ver 3 tipos de instrumentos (Chrods para el jugador 0, Lead para el jugador 1 y Bajo para el jugador 2)

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

Paso 6: imprima el modelo 3D

Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D
Imprime el modelo 3D

Para el primer paso, descargue el STL e imprímalo.

después de quitar los soportes y tal vez un poco de lijado (dependiendo de la resolución de la impresora)

pintarlo del color deseado

Paso 7: Montaje y soldadura

Ensamblaje y Soldadura
Ensamblaje y Soldadura

Así que básicamente aquí es donde ocurre la verdadera magia.

puede seguir estos esquemas y soldar todo junto.

Tenga en cuenta que puede cambiar la posición de los PIN, solo recuerde cambiarlo también en el código.

el A0 y el I2S están bastante fijos en su lugar:

ya que el A0 es para el puente de resistencia (usamos la diferencia en la corriente para saber qué botón de los 5 se presionó, similar a este Instructables.

el I2S tiene una codificación específica lo puedes encontrar aquí

Paso 8: reproduce algunos bucles con tus amigos

Recomendado: