💾 Archived View for wiki.archipielago.uno › comonavegar › radio.gmi captured on 2023-12-28 at 15:15:20. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-09-08)
-=-=-=-=-=-=-
Acá encuentras detalles sobre nuestra radio, Radio Costa.
Nuestra radio inicialamente estuvo alojada en una Raspberry Pi llamada Pira. Tenía acceso a internet pero no se podía acceder a ella desde afuera. No teníamos acceso al router para abrir los puertos.
Para poder transmitir hicimos un "ssh reverse tunneling" con caracolito. De esa forma pudimos hacerla funcionar. Pira usaba Ices+Icescast2.
Más adelante pudimos aprovechar el espacio de un servidor amigo, donde los recursos nos permitieron cambiar de Ices2 a Liquidsoap. La radio estuvo mucho tiempo alojada ahí.
Ya con nuestro propio servidor nos dedicamos a explorar otras opciones para manejar la radio, como LibreTime, pero no terminó de convencernos. Por ahora decidimos quedarnos con Icecast2+Liquidsoap.
La radio usa Icecast2 con Liquidsoap para servir y reproducir el audio.
Ambos programas son relativamente livianos y simples. Manejamos todo por la línea de comando.
Originalmente Ices2 utilizaba una lista en texto plano para leer las canciones que queremos que reproduzca. En ese archivo escribíamos los caminos ("paths") de las canciones. Por ejemplo:
~/musicaradio/LasLetras/Tanama.ogg
Un detalle para quienes quieran usar Ices2: solo reproduce archivos ".ogg".
Actualmente, con Liquidsoap, utilizamos las listas de reproducción que le indicamos (e.g. lista.m3u). Este programa se maneja con un script, y utiliza su propio lenguaje. El programa lee un archivo con extensión ".liq". Este es el contenido de nuestro archivo ".liq":
#!/usr/bin/liquidsoap # Direccion del log set("log.file.path","/tmp/log/basic-radio.log") def predicate.activates(~init=false, p) last = ref(not init) fun () -> begin cur = p() ans = (not !last) and cur last := cur ans end end # Musica dia = playlist("/~/jabonliquido/dia.m3u") tarde = playlist("/~/jabonliquido/tarde.m3u") noche = playlist("/~/jabonliquido/noche.m3u") madrugada = playlist("/~/jabonliquido/madrugada.m3u") # Separadores separadores = playlist("/~/jabonliquido/separadores.m3u") # Seguridad seguridad = single("/~/musicaradio/Separadores/separadorRCdiez.ogg") # Radio radio = switch([ (predicate.activates({ 0m-7m }), separadores), ({ 4h-10h }, madrugada), ({ 10h-16h }, dia), ({ 16h-22h }, tarde), ({ 22h-4h }, noche) ]) # Si algo sale mal esto se reproducira radio = fallback(track_sensitive = false, [radio, seguridad]) # La salida del stream output.icecast(%mp3(bitrate=128), host = "localhost", port = 8000, icy_metadata = "true", password = "password", mount = "radiocosta", description="La radio oficial de Archipielago I.", radio) output.icecast(%mp3.abr(bitrate=64,max_bitrate=128,id3v2=true), host = "localhost", port = 8000, icy_metadata = "true", description="(Menor calidad) La radio oficial de Archipielago I.", password = "password", mount = "mradiocosta", radio)
De manera simple este script indica:
Muchas veces nos encontramos con que la radio no tiene la metadata incluída en sus canciones. Para añadir la información correspondiente usamos `id3v2` para varios formatos (mp3, m4a, wav, ...) y `vorbiscomment` para ".ogg".
Con `id3v2` podemos hacer varias cosas.
Si quieres ver la metada de todos los archivos ".mp3" en una carpeta puedes hacer:
id3v2 -l *.mp3
Para añadir el nombre de artista a todos los archivos ".mp3" puedes hacer:
id3v2 -a "Nombre de Artista" *.mp3
Para añadir el título de una canción puedes hacer:
id3v2 -t "Nombre de la canción" cancion.mp3
Con que la canción tenga nombre de artista y título nos es suficiente.
Para `vorbiscomment` puedes usar estos dos comandos.
Para añadir nombre de artista puedes hacer:
vorbiscomment -a -t "ARTIST=Nombre de artista" Nombredelarchivo.ogg
Para añadir el título de una cancióin puedes hacer:
vorbiscomment -a -t "TITLE=Titulo de la canción" Nombredelarchivo.ogg
Lamentablemente `vorbiscomment` no permite usar el asterisco (*) para añadir a todos los ".ogg", por lo que hay ir uno por uno.
Cuando copiamos o bajamos canciones a la radio es común encontrar que los nombres de los archivos tienen espacios o palabras que no queremos.
Como por ejemplo:
Hector Coco Barez - Lo que te vuelve loco.mp3
En este caso nos interesa quitar el nombre de artista y todos los espacios en blanco. Vayamos por paso.
Para remover lo que se quiera del título de los archivos usamos `rename`. Supongamos que todos los ".mp3" en nuestra carpeta tienen lo mismo. Usaríamos el siguiente comando para borrarlo:
rename ’s/Hector Coco Barez - //‘ *.mp3
El archivo se renombra como "Lo que te vuelve loco.mp3". En el resto de los ".mp3" también se elimina.
Ahora queremos quitar los espacios en blanco para que Liquidsoap los pueda leer sin problema. Usamos el siguiente comando que aplica a todos los archivos ".mp3" de la carpeta:
rename 's/ //g' *.mp3
De esta forma el archivo queda "Loquetevuelveloco.mp3", justo como lo necesitamos.
A veces el archivo tiene números luego de un guión, como por ejemplo "Hector Coco Barez - Lo que te vuelve loco-415633156.mp3". En este caso, luego de hacer los pasos anteriores, hacemos este último para elminarlos:
rename 's/\-\d+\.mp3$/\.mp3/' *.mp3
Este comando le dice que elimine todo lo que esta entre el guión ("-") y el ".mp3". El "*.mp3" establece que haga lo mismo para todos los archivos que terminen en ".mp3".
También nos podemos encontrar con un archivo de nombre `cancion[123456].mp3`. Si queremos que elimine los corchetes y los números podemos usar:
rename 's/\[.*\]//' *.mp3
El archivo entonces quedaría como `cancion.mp3`.
Para que Liquidsoap reproduzca las canciones es necesario añadir su dirección ("path") a nuestra lista de bloque (.m3u). Siguiendo con el ejemplo, supongamos que ésta y las demás canciones en esta carpeta las queremos añadir a la tarde.
Primero debemos conocer su dirección completa. Estas canciones estan en una carpeta de álbum (ElLaberintodelCoco), dentro de la carpeta de artista (CocoBarez), dentro de la carpeta de la música de la radio (musicaradio). Si nos movemos a la carpeta donde están todas las canciones podemos hacer esto:
find $(pwd) -iname "*.mp3"
Esto "imprime" la dirección completa de todos los archivos con la extensión ".mp3".
Suponiendo que nuestra musica esta en el "home" (~) en una carpeta llamada "musicaradio", el resultado con la canción de ejemplo sería el siguiente:
/home/usuarie/musicaradio/CocoBarez/ElLaberintodelCoco/Loquetevuelveloco.mp3
Esa dirección (y la de las demás canciones) la añadimos al archivo "tarde.m3u". Para poder distinguir entre artistas es posible comentar en el archivo con "#":
# Coco Barez /home/usuarie/musicaradio/CocoBarez/ElLaberintodelCoco/Loquetevuelveloco.mp3 # Viento de Agua /home/usuarie/musicaradio/VientodeAgua/DePuertoRicoAlMundo/FiestadePlena.mp3
Y listo, así la canción se añade a la lista de la tarde.
find ~ -type d | ls -ltra | tail -10
Esto comando muestra las últimas 10 carpetas que fueron creadas. Se pude editar el comando `tail` para mostrar la cantidad que se quiera.
Si bien Icecast2 no recomienda editar sus ".xsl", nosotres nos aventuramos. :)
Para poder mostrar las últimas canciones que han sonado en la radio incrustramos un ".txt" que las muestra.
Hicimos un script (.sh) que extrae la últimas canciones que han sonado del log de liquidsoap. Luego elimina parte de la dirección (path) de las carpetas. Eso lo convierte en un ".txt" y ese archivo lo incrustramos en la página de icecast.
El script (.sh) contiene lo siguiente:
#!/bin/bash tail -n 20 /liquidsoap/log/radio.log | grep RID | cut -d '"' -f 2 > /usr/share/icecast2/web/ultimas.txt sed -i 's/\/home//' /usr/share/icecast2/web/ultimas.txt sed -i 's/.mp3//' /usr/share/icecast2/web/ultimas.txt echo Listo
Vamos por paso.
tail -n 20 /liquidsoap/log/radio.log | grep RID | cut -d '"' -f 2 > /usr/share/icecast2/web/ultimas.txt`
Este comando es una composición de varios. El primer comando es `tail`, que muestra las últimas líneas del archivo que le indicas. En este caso le estamos diciendo que nos muestre las últimas 20 líneas (`-n 20`) del log de liquidsoap.
Luego lo pareamos con que solo muestre las líneas que tienen "RID", con `grep RID`.
A la vez le decimos que solo muestre lo que esta entre comillas, que en este caso es la dirección (path) de la canción. Eso lo logramos con `cut -d '"' -f 2`.
Luego le decimos que el resultado de esos comandos lo convierta en un archivo llamado "ultimas.txt" y que lo coloque en /usr/share/icecast2/web/ (donde estan los archivos de la página web).
Una línea dentro del archivo ".txt" se ve de la siguiente forma:
/home/musicaradio/CERO39/MontateenelViaje/Corozo.mp3
sed -i 's/\/home//' /usr/share/icecast2/web/ultimas.txt
Este comando con "sed" elimina la parte de la dirección que dice "/home/", en las líneas del ".txt". Esto lo hacemos por motivos de seguridad.
El resultado es:
/musicaradio/CERO39/MontateenelViaje/Corozo.mp3
sed -i 's/.mp3//' /usr/share/icecast2/web/ultimas.txt
Por último, este comando "sed" elimina los ".mp3" al final de cada línea. Esto lo hacemos más por motivos estéticos.
Al final del script escribimos "echo Listo" para saber que el script se ejecutó exitosamente.
Con este script guardado (guardado como "ultimas.sh", por ejemplo) podemos hacer que se ejecute cada cierta cantidad de tiempo. Eso lo logramos con un "cronjob".
$ crontab -e
Dentro de ese archivo, al final, escribimos la siguiente línea. Este ejemplo esta hecho para correr el script cada minuto:
Con este script automatizamos las últimas canciones que están sonando en la radio.
Ahora necesitamos "incrustrar" ese ".txt" en nuestra página.
En el archivo "status.xsl" de la carpeta de icecast (/usr/share/icecast2/web/status.xsl) incluímos lo siguiente:
<object data="ultimas.txt" type="text/plain" width="500" style="height: 250px"></object>
El grosor y la altura la determinas a gusto.
El resultado final debe mostrar algo parecido a:
/musicaradio/CERO39/MontateenelViaje/Corozo /musicaradio/Pachyman/InDub/Uptown /musicaradio/YesserTejeda/Kijombo/SwingRipiaoftElProdigio /musicaradio/Separadores/separadorazul /musicaradio/AustinTV/LaUltimaNochedelMundo/Rucci
En nuestro servidor tenemos instalado `yt-dlp` de acuerdo a las instrucciones oficiales donde se descarga directamente el binario:
yt-dlp Installation - Using the release binary
Para actualizarlo, como root, hay que realizar lo siguiente:
# yt-dlp -U
Una futura opción de interface gráfica para manejo de la radio.