Montando un pedal de efectos de guitarra con un Raspberry Pi
19 Mar 2023Conseguí este enlace a un software de pedal de efectos de guitarra, y me ganó la curiosidad y decidí reconstruirlo con el material que tengo a mano. El repositorio contiene código para correr un procesador de efectos de sonido de baja latencia (léase, efectos de sonido en tiempo real).
El código está escrito en C++, usando SDL2 para despliegue visual, RtAudio para interactuar con la salida de audio y crow para un servidor web que presenta la interfaz gráfica de los controles del pedal.
El material que utilicé: un Raspberry Pi 3 montado en una pantalla táctil de element14, un breadboard para montar los botones que se conectan al Raspberry Pi por el puerto GPIO, y un dispositivo de sonido con puerto de micrófono y de salida que se conecta por puerto USB. Es también la primera oportunidad que tuve de probar la pantalla táctil.
El proceso para comenzar a utilizar la pantalla no tuvo contratiempos: se atornilla el Raspberry Pi detrás de la pantalla, se conectan por un puerto especializado, y utiliza el mismo enchufe oficial del Raspberry Pi, que provee suficiente energía para ambos componentes. El Raspberry Pi en forma de tableta es un dispositivo bien interesante, aunque el setup actual está dado para mantenerlo conectado a un enchufe y no a una batería. Igual conecté un teclado porque la vida es muy corta para usar el teclado tactil.
Después de haber comprobado que la pantalla funciona, proseguimos a compilar e instalar GuitarEffects. El procedimiento está razonablemente bien definido en el readme del proyecto. Esto es mayormente instalar las dependencias con apt
, y luego compilar a traves de configure
, make
y make install
.
El único comentario que tengo sobre el proceso: la instalación de RtAudio funcionó prácticamente fuera de caja (sin pasar opciones extra). Sin embargo, tuve un mensaje de error cuando intentaba hacer configure
: No known system type found for realtime support!
. Para resolver esto tuve que instalar el paquete de desarrolladores de ALSA, sudo apt-get install libasound2-dev
, y luego el proceso continuó sin más errores.
Una vez todo compilado, corrí sudo ../bin/server
desde el directorio web
del repositorio. En este momento el programa no pudo determinar cuál iba a ser el dispositivo de audio que iba a utilizar, y lo preguntó por el terminal. Una vez seleccionado mi dispositivo de sonido, el programa abre una ventana que muestra la onda de audio en tiempo real.
El programa sirve una página web que ofrece los controles completos del pedal. Se puede abrir dentro del propio Raspberry Pi o desde otro dispositivo en la misma red.
Lo que queda es conectar un instrumento, unas cornetas y comenzar a tocar.
Decidí usar el Raspberry Pi 3 porque el 4 que recientemente adquirí pasó a ser mi servidor Samba de archivos, reemplazando el viejo RPi 3. Creo que la potencia del 4 me hizo falta, pues noté bastante crujido y popping, seña de que el desempeño no es suficiente. Hay maneras de configurar el Pi para mejorar el desempeño del audio en tiempo real, incluyendo desactivar servicios como networking. Esto en particular para este proyecto no es una opción dado que corre un servidor web.
Los botones no me funcionaron cómo lo declara el readme del proyecto. Sin embargo, esto fue algo a lo que no le presté mucha atención dado que la interfaz web me entretuvo suficientemente. El pedal al momento ofrece una cantidad de efectos interesantes: autowah, filtros de paso alto y paso bajo, flanger, fuzz, delay, distorsión, compresor, reverberación, looper, entre otros más.
Como experimento me pareció muy interesante, y es un proyecto sólido con mucho potencial. Algunas cosas que hubiese hecho con un poco más de tiempo:
- Hacer funcionar los botones: la documentación no deja claro qué hacen específicamente, así que tampoco vi la necesidad de hacerlos funcionar
- Mejorar el desempeño de audio en tiempo real: el artículo que enlacé anteriormente tiene buenas sugerencias. Mi setup no incluye ventilador, así que no quise lidiar con overclocking. La interfaz web presenta la temperatura del sistema, y no varió en la hora que estuve tocando. Sería cuestión de leer y evaluar la factibilidad de cada sugerencia