Tabla de contenido:

Guante de baile: 9 pasos
Guante de baile: 9 pasos

Video: Guante de baile: 9 pasos

Video: Guante de baile: 9 pasos
Video: Sadeck | Tutting |Murmuration 20 2024, Noviembre
Anonim
Guante de baile
Guante de baile

En este tutorial, lo guiaré a través del diseño de un guante que le permite interactuar con la música a través del baile. ¡Construirá un guante con acelerómetro, diseñará una composición en Ableton y luego conectará los dos de la manera más compleja o simple que desee!

Suministros

  • Ableton (o prueba gratuita)
  • Un arduino
  • Cables de salto
  • Soldador
  • Cartulina
  • Pistola de silicona
  • Mucha imaginacion

Paso 1: Concepto

Este proyecto está diseñado para ser divertido. Si la forma en que funciona el proyecto de ejemplo en este tutorial no es divertida para usted, ¡rediseñe!

Recomiendo poner algunas de tus canciones favoritas, mover las manos hacia ellas y ver qué pasa. ¿Mueves las manos hacia arriba y hacia abajo? ¿Un lado a otro? ¿Lento o rápido? ¿Qué aspectos de la música te hacen querer mover las manos? Si tiene una lista de estos por escrito, probablemente podrá encontrar algunas formas de incorporar los movimientos que disfruta en sus eventuales algoritmos.

Estos son los movimientos que utilicé:

  • Un movimiento rápido hacia arriba y hacia abajo activa el inicio de la canción, la batería o el bajo. (¡Esto ocurre en diferentes puntos de la canción, no necesariamente simultáneamente!)
  • Un movimiento lento e inclinado de lado a lado desencadena un sonido más agudo y con más eco.
  • En una sección particular de la canción, inclinar mi mano hacia arriba hace que la música se calme, así que la "atrapé" con el puño cerrado.

¡Úselos o haga los suyos propios!

(Tenga en cuenta: este tutorial no cubre cómo generar música o melodías en vivo en Ableton. Si sigue estas instrucciones, solo podrá aumentar / disminuir el volumen de las pistas o la aplicación de efectos de audio).

Paso 2: preparar el acelerómetro

Prepare el acelerómetro
Prepare el acelerómetro

Primero, averigüe qué tipo de acelerómetro tiene. Usé este; cualquier acelerómetro de tres ejes servirá. (O pruebe con otro tipo de sensor si quiere volverse loco). Asegúrese de saber cómo leer los datos del acelerómetro del Arduino. Es posible que deba descargar una biblioteca para su acelerómetro si utiliza algo más complejo que la entrada analógica.

Después de haberlo probado con una placa de pruebas, suelde cables cortos codificados por colores en las clavijas de su acelerómetro. Coloque un cable rojo en la clavija de alimentación, un cable negro en la clavija de tierra y cualquier otro cable necesario para la comunicación del acelerómetro. (Si tiene un acelerómetro I2C, estos serán los pines SCL y SDA. Si tiene un acelerómetro analógico, es probable que haya un pin para cada una de las salidas x, y, z). Asegúrese de que su soldadura sea sólida y que las cuentas no se superpongan entre los pines adyacentes.

Paso 3: construye el guante

Construye el guante
Construye el guante

Corta un trozo de cartón delgado o papel grueso en un rectángulo un poco más grande que tu acelerómetro. Pega el acelerómetro al cartón, asegurándote de poner pegamento en la parte inferior. Luego, pegue el acelerómetro con respaldo de cartón a la parte posterior de su guante. Cosa cada alambre sin apretar a la muñeca del guante para aliviar la tensión en el acelerómetro, y luego su guante estará listo. Conéctelo a cables más largos para tener suficiente espacio para mover la mano cuando esté enchufado.

Paso 4: redactar en Ableton

Ahora es el momento de componer la canción que eventualmente usarás el guante para controlar. Recomiendo los bucles de Ableton que suenan bien juntos, pero que se pueden usar para aumentar gradualmente: pruebe la melodía, los acordes, el bajo y la percusión. Podrás usar tu guante para controlar cuándo se reproduce o no cada bucle.

Si puede pensar en algún tipo de sonido interesante para incorporarlo ocasionalmente a una canción, como un efecto de sonido extraño o un instrumento poco convencional, ¡intente agregar uno o dos de esos también! Puede vincularlos a movimientos de mano menos comunes para traer algo interesante de vez en cuando.

Aquí hay un enlace a mi composición compatible con Arduino, en caso de que no desee escribir una propia:

(Desafortunadamente, enseñarle Ableton no está dentro del alcance del tutorial. Sin embargo, hay muchos buenos videos instructivos y Ableton tiene una prueba gratuita de 90 días. Recomiendo este video).

Paso 5: comience a usar Firmata

Comience a usar Firmata
Comience a usar Firmata

Para permitir que su Arduino se comunique con Ableton, deberá usar una biblioteca llamada Firmata. También deberá descargar el kit de conexión para Ableton.

En Ableton, haga clic en Paquetes> Kit de conexión> Dispositivos en el menú en la parte superior izquierda, y luego haga doble clic en el primer dispositivo (Arduino) para agregarlo. ¡Asegúrate de recordar a qué pista de Ableton agregaste el dispositivo!

Paso 6: Pruebe Firmata

Prueba Firmata
Prueba Firmata

Primero, probaremos y nos aseguraremos de que su Arduino se esté comunicando con Ableton. Sube este fragmento de código a tu Arduino y ejecútalo:

#include void analogWriteCallback (byte pin, valor int) {if (IS_PIN_PWM (pin)) {pinMode (PIN_TO_DIGITAL (pin), OUTPUT); analogWrite (PIN_TO_PWM (pin), valor); }} configuración vacía () {Firmata.setFirmwareVersion (FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); Firmata.attach (ANALOG_MESSAGE, analogWriteCallback); Firmata.begin (57600);} bucle vacío () {Firmata.sendAnalog (0, 800);}

Este es el mínimo indispensable para comunicarse con Firmata. Envía continuamente una salida de 800 (de 1024) al puerto 0 del dispositivo Firmata en Ableton. Si carga este código en su Arduino mientras tiene un dispositivo Firmata abierto en Ableton, debería verse como la imagen de arriba. (Asigne el puerto 0 a cualquier cosa en Ableton para poder ver los valores).

Puede hacer clic en el botón Mapa y luego en cualquier dispositivo compatible con Firmata en Ableton para agregar una asignación entre la entrada recibida en ese puerto y el valor de ese dispositivo Ableton. Los ejemplos fáciles incluyen el volumen de cualquier pista o cualquier dial dentro de un efecto de audio. ¡Explore y vea lo que puede encontrar para mapear!

Paso 7: ¡Influya en la música con los movimientos de sus manos

¡Influye en la música con los movimientos de tus manos!
¡Influye en la música con los movimientos de tus manos!

En este momento, debería tener algo de música en Ableton, un script Firmata en su Arduino y un guante de acelerómetro adjunto. ¡Hagamos algo de música!

Asigne puertos del dispositivo Arduino en Ableton a diferentes cosas (sugiero rastrear el volumen), y luego agregue líneas de código para enviar datos a cada puerto desde Arduino.

Firmata.sendAnalog (puerto, nivel de volumen);

Utilice un código como este para cada puerto de Firmata.

Si desea hacer algo simple, puede enviar los valores del acelerómetro sin procesar a los puertos de Ableton y mapearlos desde allí. Para una experiencia más sofisticada, puede decidir: ¿qué valores del acelerómetro deberían activar los sonidos, cómo y cuándo?

Luego, reproduce todos tus bucles de Ableton, ejecuta tu código Arduino y ¡baila!

(Descargo de responsabilidad: si planea crear algún tipo de algoritmo complejo para su canción, puede llevar mucho tiempo ajustarla. "Dance away" puede ser menos preciso de lo previsto).

Paso 8: la clase de pista (¡bonificación!)

Si no le importa el aumento de volumen o tiene otra forma de mitigarlo, omita este paso. De lo contrario, ¡sigue leyendo!

Noté que cambiar el volumen de silenciado a completo de una sola vez crea algunos sonidos de estallido desagradables, y es bueno poder bajar el volumen más gradualmente. Sin embargo, es difícil hacer esto en el entorno de programación síncrona de Arduino. Así que aquí hay un código para hacer que desaparezcan los estallidos:

class Track {public: int volume; int volumeGoal; int updateSpeed; Track () {volumen = 0; volumeGoal = 0; updateSpeed = 0; } void setVolumeGoal (int objetivo) {volumeGoal = objetivo; } int getVolumeGoal () {return volumeGoal; } void setUpdateSpeed (int fastness) {updateSpeed = fastness; } int getVolume () {volumen de retorno; } void updateVolume () {if ((volumen> objetivo de volumen) && ((volumen - objetivo de volumen)> = updateSpeed)) {volumen - = updateSpeed; } else if ((volumen = updateSpeed)) {volumen + = updateSpeed; }} void mute (int fastness) {volumeGoal = 50; updateSpeed = solidez; } vacío completo (solidez int) {volumeGoal = 950; updateSpeed = solidez; }};

Cada pista tiene un volumen actual, un volumen objetivo y una velocidad a la que se mueve hacia ese volumen objetivo. Cuando desee cambiar el volumen de una pista, llame a setVolumeGoal (). Cada vez que ejecute la función loop () en su Arduino, llame a updateVolume () en cada pista y luego envíe esa información a Firmata con getVolume (). ¡Cambie la velocidad de actualización para desvanecimientos más rápidos o más graduales! Además, evite ajustar el volumen a 0 si puede; en su lugar, configúrelo en un valor muy bajo (el valor predeterminado en mute () es 100).

Paso 9: duración de la pista, beats y más (¡bonificación!)

Puede hacer muchas cosas para que el sonido resultante de su proyecto sea más fácil de escuchar. Aquí hay algunas opciones:

Puede realizar un seguimiento de cuánto tiempo se ha estado ejecutando la canción. Para hacer esto, tendrá que averiguar cuándo comenzó la canción; Recomiendo un ciclo while en la función setup () que retrasa la ejecución de su código hasta que detecta un movimiento de la mano. Almacene la hora de inicio de la canción en una variable usando millis () y verifique cuánto tiempo ha estado funcionando cada vez que realiza un bucle (). Puede usar esto para habilitar o deshabilitar ciertas funciones en ciertos momentos de la canción.

Si sabe cuánto tiempo duran sus bucles en milisegundos, también puede realizar un seguimiento de cuántos bucles ha pasado para una comprensión más matizada de la estructura de la canción.

Otro problema potencial que puede encontrar es cuándo iniciar y detener la reproducción de una pista. Resolví esto haciendo un seguimiento del tiempo de un compás en el que se encontraba la canción. Entonces podía reproducir pistas para cualquier número de tiempos después de un gesto, en lugar de cortarlo inmediatamente. Esto hace que las cosas fluyan mucho mejor. He aquí un ejemplo:

if (millis () - lastLoop> = 4000) {bucles + = 1; lastLoop = millis (); for (int j = 0; j <8; j ++) {beatNow [j] = false; }} beat = (millis () - lastLoop) / 250; if (latido! = lastBeat) {lastBeat = latido; beatsLeft - = 1; }

Asegúrese de actualizar los volúmenes de acuerdo con los valores de beatNow [beat] y / o beatsLeft. Se adjunta un código de ejemplo que incorpora casi todo en este tutorial, más algunos, en caso de que desee verlo en la práctica.

Recomendado: