295 - Mesa de efectos para podcasts y audios
board-effects es una mesa de efectos por software para utilizar en tus podcast implementada en JavaScript para Linux en el taller de esLibre
De nuevo, vuelvo a hacer mención de esLibre 2021, porque en el primer día del congreso impartí un taller sobre desarrollo de aplicaciones nativas en GNU/Linux con JavaScript y Gtk+. La cuestión, es que quería hacer algo diferente. Una aplicación, que se saliera de lo típico. Normalmente, suelo recurrir a las típicas tarjetas de biblioteca, donde tienes que introducir usuarios o los libros. Pero, aquí se trataba de demostrar el potencial y lo sencillo que es hacer aplicaciones con JavaScript y Gtk+. En este sentido, se trataba de buscar una aplicación que permitiera crear botones con imágenes, reproducir audio, y hacer tareas mas interactivas. De ahí nació el mesa de efectos para podcasts y audios.
Mesa de efectos para podcasts y audios
Sobre JavaScript y Gtk+
Hace ya algún tiempo, cuando me enteré de que el movimiento de GNOME para convertir JavaScript en un lenguaje vehicular para el desarrollo de aplicaciones, me llamó mucho la a atención. Hoy en día me parece un movimiento brillante, en tanto en cuanto, al auge del JavaScript entre los desarrolladores de aplicaciones. Actualmente, no solo tienes JavaScript en el frontend, también lo puedes encontrar en el backend de la mano de Nodejs, y en el caso de GNOME, también de la mano de Gjs.
Hacer un hola mundo con Gjs, es tan sumamente sencillo, como hacer un script con el siguiente contenido,
#!/usr/bin/gjs
print("Hola mundo");
Sin embargo, para crear aplicaciones con interfaz gráfico, es necesario, utilizar un framework, que te de todas las herramientas necesarias para poder implementarlo de una forma, mas o menos sencilla. Esto es precisamente lo que te ofrece Gtk.
Sobre la idea
¿A que me quiero referir con un mesa de efectos para podcasts y audio?. Se trata de una sencilla aplicación que te permita reproducir los típicos efectos en un audio en tiempo real.
¿Que efectos? Pues básicamente los que tu quieras, porque la gracia de la aplicación, es que te permita añadir tantos efectos como tu quieras, y los efectos que tu quieras. Básicamente esta tarea la delega totalmente en ti, para que seas tu mismo el que elijas lo que quieras.
De esta manera, configurar la aplicación, configurar la mesa de efectos para podcasts y audios, es tan sencillo, como ir añadiendo todos los efectos que consideres, y en su caso eliminarlos. Añadir un efecto, es algo tan sencillo, como
- descargar una imagen
- descargar un audio en formato
mp3
. Esto es importante, porque solo reproduce audios en este formato. En caso que el efecto que tengas esté en otro formato, lo tendrás que cambiar amp3
utilizando alguna herramienta como puede ser el propioffmpeg
. - abrir la aplicación y añadir pulsar el botón
añadir
. Esto te mostrará un cuadro de diálogo, el que te preguntará donde se encuentra la imagen y donde se encuentra el audio. Y en su caso, si quieres que el botón, también tenga un texto.
Inicialmente pensé en poner solo nombres en los botones. Nombres del tipo de Grito
, Aplausos
, Tambores
, Disparo
, pero, teniendo en cuenta que se trataba de un taller, me pareció mucho mas interesante que los botones tuvieran imágenes. Por otro lado, para la mesa de efectos, tendrás que reconocer, que es mucho mas atractivo, hacerlo con imágenes que no con texto.
Otro interesante resultado de haberlo hecho de esta manera, es decir, utilizando una aplicación externa para reproducir el audio, es que me permite reproducir varios efectos a la vez o prácticamente.
Sobre la aplicación
La aplicación consiste en una ventana donde puedes encontrar todos los botones de efectos que hayas configurado, siguiendo los sencillos pasos descritos anteriormente.
Como te puedes hacer una idea, el uso de la aplicación es tremendamente sencillo. Simplemente tienes que pulsar cualquiera de lo botones
que hayas configurado previamente, y ya se está reproduciendo el sonido. Además puedes solapar dos sonidos. Es decir, solo tienes que pulsar un botón a continuación de otro, sin esperar a que haya concluido la reproducción del primero de ellos.
El reproductor
Para reproducir cada uno de los sonidos se utiliza una aplicación externa. La aplicación que he elegido es mpg123
. mpg123
es un reproductor de mp3 de código abierto para la terminal y sin interfaz gráfica.
Por darte mas detalles, no lo utilizo con ningún tipo de parámetro ni opción adicional. Directamente tal y como viene. Probablemente tendría que utilizar la opción --quiet
, para que no mostrara la información, ni el archivo ni el nombre de la pista que va a reproducir, pero lo cierto es que, con el fin de mostrarlo en el taller, pensé que era mucho mas interesante hacerlo de esta forma.
La base de datos
Por otro lado, para construir la aplicación y almacenar los botones, lo he hecho utilizando una base de datos SQLite
. Soy consciente de que he exagerado ligeramente, que podría haberlo guardado en un archivo con formato JSON
, y hubiera sido mas que suficiente. Sin embargo de nuevo, pensé que la forma mas clara de mostrar el potencial de las aplicaciones nativas en GNU/Linux con JavaScript y GTK+, era tirando de una base de datos.
Lo cierto es que, es muy sencillo, y te da un gran potencial, en tanto en cuanto, el marco de trabajo con el que te vas a relacionar con la base de datos es siempre el mismo con independencia del tipo de base de datos que se trate, SQLite, DB2, PostgreSQL, MariaDB. Esto evidentemente, te permite abstraer por completo, y migrar tu proyecto entre diferentes bases de datos.
Testing
Algo que inicialmente echaba de menos en este framework, era la posibilidad de hacer test unitarios. Sin embargo, implementé una sencilla librería, a partir de otra, desarrollada para frontend, que me ha permitido realizar testing de forma muy sencilla, donde me muestra los test realizados y los resultados conseguidos.
Empaquetado y distribución
Tal y como se preguntó en el propio taller de esLibre 2021, ¿es posible distribuir aplicaciones implementadas con JavaScript, Gjs y GTK+? Si. Si que es posible, y no solo es posible sino que es tan sencillo como hacerlo para cualquier otro script implementado en Bash, Python, o en cualquier otro lenguaje interpretado.
En este sentido, a mi me queda precisamente este paso, el de empaquetar la aplicación para distribuirla y que cualquier pueda hacer uso de de ella libremente. Esto espero poder hacerlo a finales de este mes de julio o durante el mes de agosto. No te preocupes que en cuanto esté disponible lo anunciaré a bombo y platillo.
Uso con OBS Studio y Audacity
Para utilizarla con OBS Studio no vas a tener ningún problema. OBS Studio te lo pone realmente sencillo si quieres utilizar varias entradas de audio.
El problema lo encontrarás, o al menos, yo si lo encontré, si quieres utilizar la mesa de efectos con Audacity, porque este solo permite una entrada de audio. También es posible que se pueda hacer de otra forma, pero, lo cierto es que yo no la he encontrado. Así que lo que hice fue crear un loopback
. Para ello solo tienes que utilizar este comando para habilitarlo,
pactl load-module module-loopback latency_msec=1
Y para cuando hayas dejado de grabar o de hacer lo que tengas que hacer simplemente lo descargas. Para descargarlo tendrás que utilizar este otro comando,
pactl unload-module module-loopback
Una vez cargado el módulo tienes que utilizar la aplicación pulseaudio
para combinar las salidas y obtener el resultado esperado. Aunque por supuesto, vía línea de comandos también lo podrías hacer de igual manera. Esto queda completamente a tu decisión.
Indicarte también, que puedes cargar tantos módulos como necesites, aunque yo por el momento, con uno solo he tenido mas que suficiente para utilizar Audacity junto con la mesa de efectos.
Conclusión
Como ves se trata de una interesante opción para poder introducir efectos de forma sencilla, y sobre todo, económica en tu podcast. No necesitas adquirir hardware adicional, ni nada por el estilo.
Aquí me quedan pendiente dos asuntos, por una lado el uso de las librerías que soporta para la reproducción de audio, sin requerir utilizar una aplicación de terceros. Y por otro empaquetarlo, como comenté anteriormente.
Llegados a este punto y con vistas a la próxima temporada, en la que quiero profundizar en mi Rust, lo cierto es que esto va a llevar a la migración a este lenguaje de programación, sin lugar a dudas. Si todo va bien, la experiencia servirá para un taller o charla para próximos eventos.
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
Imagen de portada de Adi Goldstein