LoopStation

Alma Lucía Vázquez Beltrán

Mario Sauce Soriano

Objetivo

El objetivo es construir una mini loop station funcional.

Definiendo el proyecto

Primero, para entender la naturaleza del proyecto, se debe definir el concepto de loop station.

¿Qué es una loop station?

Tradicionalmente hablando, este concepto suele asociarse (y puede que estés familiarizado con ello) a los pedales de guitarra. Sin embargo, ese no es el único contexto que tiene una loop station. Para generalizar y sentar las bases de este proyecto, se definirá una loop station como un dispositivo que permite al usuario grabar o capturar una serie de audios (pistas, eventos MIDI, etc.) y reproducirlos en bucle (loop). En el caso concreto de esta estación de bucles, se encargará de grabar audios.

De esta manera, se pueden crear bucles multicapa, dando un amplio margen para que la creatividad tome el control (armonizar, grabar una base de fondo, etc.).

Estableciendo los límites

Una loop station profesional puede variar en su composición (número de pistas, opciones de manipulación, etc.). Debido a esto, es necesario establecer las bases de las limitaciones y expectativas de esta mini versión:

  • 3 pistas funcionales (grabación, overdub y control de volumen).
  • Graban audios a través del módulo de micrófono.
  • La primera pista será una pista «maestra» ( la longitud del bucle), y las otras dos serán sus esclavas.

Ahora bien, hay que tener en cuenta diferentes límites en la sección de hardware. Debido a la gestión de memoria (PSRAM), se establecerá que:

  • Los bucles tienen una duración máxima de 20 segundos.

Esto implica que cuando la loop station se configura para grabar la primera pista del bucle (necesariamente la Pista 1, ya que es la maestra), se puede establecer una duración de cualquier valor entre 0 y 20 segundos. Esto se hará pulsando el botón de grabación por segunda vez para detenerla, o dejando que grabe hasta el final natural del bucle. Estas expectativas se logran mediante delimitaciones por software (al pulsar grabar por primera vez, si se alcanzan los 20 segundos de grabación, la loop station sale del estado de grabación automáticamente). De esta manera, durante todo el bucle, los audios se ajustan a la duración establecida.

Este proyecto está diseñado para que pueda desmontarse fácilmente, ya que algunos componentes deben ser devueltos. Por lo tanto, tiene un concepto de prototipo que no es definitivo y presenta algunos problemas de hardware que podrían resolverse soldando todos los componentes correctamente en una placa.

Materiales

En esta sección los requerimientos tanto de software como de hardware serán especificados. Tal y como se presenta, no es una necesidad estricta usar los mismos, y el proyecto se puede ajustar a diferentes módulos. Sin embargo, esta documentación sigue el proceso de manera fiel a las opciones especificadas que se escogieron por el grupo de trabajo y grandes modificaciones del planteamiento del proyecto podrían conllevar un gran impacto en los requerimientos de software y hardware.

Componentes

Han sido pedidos por medios más fiables a coste de un posible mayor precio, sin arriesgar a que llegaran dañados. Varios de los componentes fueron comprados en packs de varias unidades, por lo que se reflejará el precio estimado de una unidad del pack. No todos los materiales usados en esta versión son necesarios o indispensables, ya que el montaje ha sido hecho de manera subjetiva para mantener una limpieza y separación del circuito. Por lo tanto, no es una guía estricta, sino orientativa, del hardware implicado en el proyecto.

NombreCantidadCoste Estimado (euros)Comprado/Proporcionado
ESP32-S3 DevKitC-1 N16R818€Comprado
PCM510214,7€Comprado
INMP44114€Comprado
Potenciómetros30,5€Comprado
LEDs (azul)30,05€Proporcionado
LEDs (verde)10,05€Proporcionado
LEDs (amarillo)10,05€Proporcionado
Botones40,04€Proporcionado
Cables Dupont115€Comprado
Protoboard2xProporcionado x1, Bought x1
Mini Protoboard1xProporcionado

La «x» se refiere a la posibilidad de comprar los componentes maracados con precio «x» en un pack de aproximadamente 13€.

Se refiere entonces el precio total estimado a la suma del precio de todos los materiales usados en este proyecto. El precio total invertido es el precio total real restándole los materiales que fueron proporcionados o fueron comprados previamente para otros proyectos, de manera que solo se ve reflejado en éste el dinero invertido desde el inicio del proyecto a final.

Precio Total EstimadoPrecio Total Invertido
47€33,5€

Estos precios, si el proyecto fuera a empezarse de cero, son algo surrealistas. Se recomendaría comprar packs de componentes, subiendo algo el precio. De todas maneras, el dinero realmente invertido en este proyecto particular se ve reflejado en los precios de las tablas. La diferencia que marcaría añadir el precio entero de packs con componentes extras no constituye un gasto real en el proyecto, ya que ese dinero solo se desperdiciaría exclusivamente en este proyecto si no se fueran a usar en ningún futuro proyecto. También hay que considerar la posibilidad de que un componente se rompa o no funcione.

Software

Respecto a la parte de código del proyecto, se ha utilizado Arduino IDE.

La lógica del sistema

Ahora que los objetivos están claros, se puede definir una lógica para el sistema. Esto se consigue mediante dos preguntas simples:

  • ¿Qué estoy haciendo?

Es importante recalcar que una vez que la loop station empieza un loop (graba el primer track), el dispositivo SIEMPRE está reproduciendo en bucle. Eso no significa que si se cambia a grabando la loop station deja de reproducir, simplemente cambia su foco principal a la tarea de grabar. Si la loop station se encuenta en el estado de reproducir, eso simplemente significa que 1- Se ha establecido un bucle 2- Actualmente no está grabando nada.

  • ¿Dónde estoy?

El programa responde a un doble estado. Cuando el dispositivo se inicia, entra un estado de reposo (IDLE) donde su único propósito es detectar si el usuario quiere empezar a grabar (presionar el botón de grabar). Cada vez que se quiera grabar (se ha presionado el botón de grabar), al principio de cada loop (por coordinación), la loop station entra en su estado de grabar. Cuando termina de grabar, pasa a reproducir, lo que implica que ya hay un bucle definido (tiene longitud de loop, looplength, definida por lo menos, da igual si se ha grabado silencio en la pista 1).

De igual manera, responde a dónde se encuentra. ¿Estoy en la pista 1, 2 o 3? Esto ayuda a determinar dónde está grabando cuando captura la entrada (input) y decide dónde pone la salida (output) de las pistas. Esto también ayuda a la dinámica maestro-esclavo. Sólo se podrá comenzar a grabar cada bucle si la loop station se encuentra en la pista 1.

Mientras que se podría añadir una restricción para ignorar si se intenta cambiar de track al principio de cada bucle (estado de espera, IDLE) ya que se debe estar en la pista uno para grabar (igual que cuando se graba se ignora un cambio de pista), no se implementa porque ayuda a la detección temprana de mal funcionamiento del hardware (los botones se pueden pulsar nada más se enciende la loop station para controlar si cambia de pista de manera exitosa).

Con esta información, se introducen dos lógicas interesantes de la loop station:

Grabación pendiente

  • Si se presiona el botón de grabar en cualquier momento que no sea justo al principio del bucle, el sistema entra en un «estado» intermedio introducido por una variable booleana . Este «estado» intermedio es simplemente una alerta para que el sistema sepa que cuando vuelve al principio del loop tiene que empezar a grabar, asegurando que se cambie el estado.
  • Esto solo pasa si se ha establecido un loop. Cuando se inicializa/conecta, el bucle no está definido y no está intentando leer or reproducir nada, así que empieza a grabar inmediatamente tras pulsar el botón de grabar.

Con este concepto similar a las interrupciones pendientes, no se molesta al sistema hasta que se encuentra en el principio del bucle, ya que se ha establecido que no se grabará en ningún otro momento para una sincronización adecuada de la loop station que siga la naturaleza establecida.

Panic!

  • Pulsar dos botones de pista a la vez manda una señal de «PANIC!» (pánico), que resetea la ESP32.

¿Qué pasa si se pulsan botones de manera simultanea de pistas? Como el hardware está pensado para ser introducido en una caja al final, se aprovecha este caso límite para un reseteo rápido de la ESP32 ya que no es posible pulsar el propio botón de reset de la placa una vez metida en la caja y cerrada. Hay diferentes lógicas que se podían introducir para gestionar este evento, pero se aprovecha la oportunidad para el reseteo rápido. Se plantea un posible quinto botón para esta funcionalidad, pero para simplificar el hardware y minimizar los componentes, se establece el pulsar dos botones o más de track a la vez como una señal de «PANIC!».

El hardware

PCM5102

INMP441

LEDs, botones y potenciómetros

Montaje de la loop station

Los mayores problemas suelen surgir aquí. Este es el esquema presentado en la versión de la loop station que se entregó para la clase. Siguiendo las imágenes de los pines insertadas anteriormente (sin contar el INMP441 y el PCM5102).

Primer prototipo de montaje:

Funcionamiento

Esta sección detallará diferentes casos de uso, mostrando así el funcionamiento esperado del sistema.

1) Arranque de la ESP32

Una vez que la ESP32 se enciende (conectado al portátil o a baterías), el programa comienza a ejecutarse. Se inicia en un estado de reposo (IDLE), se posiciona en la pista 1 (encendiendo el LED) y configura todos los pines y opciones para los dispositivos de entrada y salida. No se espera nada más de él, por lo que no hace otra cosa que verificar la función de los botones para determinar si alguno ha sido pulsado.

2) Salida del estado IDLE

Para salir del estado IDLE, se deben cumplir dos condiciones. Esto es para que, una vez que salga de ese estado, nunca vuelva a consultar el inicio del código.

  • La loop station está en la Pista 1.
  • Se ha pulsado el botón de grabación (record).

Esto cambia inmediatamente el estado a RECORDING (Grabando). No hay otra forma de pasar de IDLE a PLAY (Reproducción), necesariamente debe pasar por la fase de grabación. Este caso se ramifica en dos situaciones distintas:

2.1) La pista maestra establece una duración de bucle de MAX_SAMPLES

Para llegar a este escenario, tras pulsar el botón de grabación por primera vez, no se debe pulsar nada más, dejando que el bucle llegue a su fin por sí solo. Esto establece automáticamente el bucle a su duración máxima y actualiza su estado a PLAYING (Reproduciendo).

2.2) La pista maestra detiene la grabación antes de MAX_SAMPLES

Para llegar a este escenario, se debe pulsar el botón de grabación una segunda vez antes de que alcance la duración máxima, estableciendo la longitud del bucle en cualquier tiempo inferior a 20 segundos.

3) Grabación de la segunda o tercera pista tras la pista maestra

Este escenario es idéntico en ambos casos. El único cambio es en qué pista se encuentra una vez que comienza a grabar. La loop station está reproduciendo la pista maestra en bucle (con el volumen que tenga configurado) y entonces se pulsa el botón de grabación. En cuanto llega al inicio del bucle, la loop station entra en estado de grabación y sale de él al alcanzar la longitud del bucle. Cualquier pulsación de otro botón durante esta fase de grabación es completamente ignorada.

4) Overdub de cualquier pista

Si el objetivo es sobrescribir cualquiera de las pistas existentes, todo lo demás seguirá ocurriendo con normalidad, pero la pista regrabada dejará de reproducirse, ya que se está grabando de nuevo. Se debe pulsar el botón de la pista que se desea y también el botón de grabación (el orden no es relevante, siempre y cuando se haya pulsado el botón de pista correcto antes de que el bucle llegue de nuevo al inicio y comience a grabar).

5) PANIC! se invoca

El modo «Panic», ya sea por pulsar accidentalmente dos botones de pista al mismo tiempo o como una forma intencionada de realizar un reinicio rápido, ocurre al pulsar o mantener pulsados dos botones (o más) de pista distintos simultáneamente. Puede ocurrir en cualquier momento.

Documentación extra

Para consultar el código y su explicación, accede a nuestro repositorio de Github:

https://github.com/soulieOG/LoopStation-esp32

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *