English English

Cree y reproduzca anuncios de audio automáticamente - Shell script

Cómo usar un script de shell para hacer anuncios automáticos en formato de audio. Esto se puede utilizar, por ejemplo, para emitir automáticamente mensajes de error (de servicios, aplicaciones), mensajes o el tiempo a través de una interfaz de audio (por ejemplo: estación de radio de Internet en la intranet o Internet, podcast RSS, etc.).

Aquí se muestra un caso de uso en el que este script shell crea y emite automáticamente anuncios a través de un flujo de radio. Este caso de uso es similar a los anuncios que se escuchan en el aeropuerto o estación de tren.  Algo similar se implementa aquí a través de un servidor de streaming Icecast2, que también se puede utilizar en la red local para enviar mensajes en formato de audio a través de altavoces en casa o en la empresa.

También puede usar este shell script, si edita algo, para otros casos de uso.

 

Requisitos previos

The following must be set up before creating the shell script:

1. Si desea acceder a información o mensajes a través de RSS: El programa RSStail
Puede ser instalado a través del gestor de paquetes apt: sudo apt-get install rsstail
Más información sobre rsstail: http://manpages.ubuntu.com/manpages/xenial/man1/rsstail.1.html

2. Servidor de streaming de radio por Internet (configurado con icecast2 y ices) con streaming en funcionamiento
Esto se utiliza aquí como medio para la salida de los anuncios creados. La radio de Internet aquí es silenciosa y no reproduce nada excepto cuando los mensajes deben ser emitidos.
También hay un tutorial sobre cómo configurar el servidor de transmisión de radio por Internet en este sitio web: https://ard-site.net/tutorials/linux/internet-radio-server-with-icecast2-and-ices-mp3-stream

¡Atención! En este caso, la lista de reproducción sólo debe contener un archivo de audio que no emita sonido. Puede descargar y utilizar este archivo de audio aquí: https://ard-site.net/downloads/mute_state.mp3

Aquí se utiliza la lista de reproducción (playlist) playlist_live.pls, que contiene sólo el archivo mute_state.mp3.

3. El programa: jq
Un programa para dar salida a los valores y contenidos de los archivos JSON. Se usa en este caso para dar salida al tiempo.
Puede ser instalado a través del gestor de paquetes apt: sudo apt-get install jq
Más información sobre jq: http://manpages.ubuntu.com/manpages/bionic/man1/jq.1.html

4. El software de texto a voz (text-to-speech tts): gtts
El Gtts se pueden descargar a través del gestor de paquetes pip o desde el sitio web pypi (https://pypi.org/project/gTTS/)
Hay un tutorial aquí en el sitio web sobre cómo instalar este software: https://ard-site.net/tutorials/linux/text-to-speak-software-for-linux-console-program-that-can-also-be-automated

5. Si desea añadir música de introducción para los anuncios: ffmpeg
Puede ser instalado a través del gestor de paquetes apt: sudo apt-get install ffmpeg

6. El archivo de audio announcement_intro.mp3
Este archivo de audio es la música de introducción que se reproduce antes del anuncio. Sólo puede estar en formato mp3.

7. Una lista de reproducción con sólo el archivo de audio para el anuncio
Aquí se crea una lista de reproducción announcement_playlist.pls. Sólo contiene el archivo: /home/ubuntu/announcement.mp3

 

El shell script

  • El texto que se emitirá como audio se puede encontrar aquí en el archivo: /home/ubuntu/announcement_text.txt
  • Los mensajes/información de un feed RSS se almacenan en este archivo: /home/ubuntu/announcement_information.txt

Aquí se utiliza la cuenta de usuario ubuntu. Es posible que tenga que hacer algunos cambios en el script. El shell script se ejecuta como root aquí.

Creación de un script de shell

vim /home/ubuntu/play_announcement.sh


El shell script tiene el siguiente contenido:

#!/bin/sh

#Saludos
greetingtext="This is an important communication. "
echo $greetingtext > /home/ubuntu/announcement_text.txt

#Di la hora actual
_timetext="It is "
_timetext+=$(env TZ=Europe/London date +"%-H")
_timetext+="O Clock."
echo $_timetext >> /home/ubuntu/announcement_text.txt

#Recuperar mensajes/información para ser emitidos - Título y descripción de una entrada del feed
su ubuntu -c "rsstail -N -d -z -P -n 1 -u http://myfeed.tld/myfeed_file.xml > /home/ubuntu/announcement_information.txt &"
cat /home/ubuntu/announcement_information.txt >> /home/ubuntu/announcement_text.txt

#cerrando texto
endtext="Thank you very much for your attention. "
echo $endtext >> /home/ubuntu/announcement_text.txt

#Convertir texto a archivo de audio - Por favor, ajuste el idioma si es necesario
rm /home/ubuntu/announcement.mp3
rm /home/ubuntu/announcement_temp.mp3
rm /home/ubuntu/announcement_temp2.mp3
su ubuntu -c "/usr/local/bin/gtts-cli -f /home/ubuntu/announcement_text.txt -l 'en' -o /home/ubuntu/announcement_temp.mp3"

#Haciendo el archivo de audio más fuerte
ffmpeg -i /home/ubuntu/announcement_temp.mp3 -filter:a "volume=16dB" -b:a 128k /home/ubuntu/announcement_temp2.mp3

#Añadido una música de introducción - El archivo terminado está ahora en: /home/ubuntu/announcement.mp3
ffmpeg -y -i /home/ubuntu/announcement_intro.mp3 -i /home/ubuntu/announcement_temp2.mp3 -filter_complex "aevalsrc=0:d=4[s1]; [s1][1:a]concat=n=2:v=0:a=1[ac1]; [0:a][ac1]amix[aout]" -map [aout] -c:a libmp3lame /home/ubuntu/announcement.mp3

#Ahora reproduzca el archivo de audio en la transmisión de radio por Internet
#Reemplazar la lista de reproducción actual con la lista de reproducción del anuncio - el comando mv no causa ningún problema mientras se está ejecutando la transmisión.
_lastplayednr=$(sed -n '6 p' /home/ubuntu/ices/logs/ices.cue)
cp /home/ubuntu/ices/playlists/playlist_live.pls /home/ubuntu/ices/playlists/playlist_live_temp.pls
cp /home/ubuntu/ices/playlists/announcement_playlist.pls /home/ubuntu/ices/playlists/announcement_playlist_temp.pls
mv /home/ubuntu/ices/playlists/announcement_playlist_temp.pls /home/ubuntu/ices/playlists/playlist_live.pls

#Ahora reproduce la lista de reproducción del anuncio
sleep 1
ps axf | grep "/home/ubuntu/ices/bin/ices -c /home/ubuntu/ices/etc/ices.conf" | grep -v grep | awk '{print "kill -10 " $1}' | sh

#Emisión de un anuncio iniciada - Durante el anuncio actual, se restablece la lista de reproducción normal. Esto reproducirá el anuncio sólo una vez. Después del anuncio, la lista de reproducción normal continuará.
sleep 10
_eins="0"
_nownr=$(expr $_lastplayednr + $_eins)
tail -n +$_nownr /home/ubuntu/ices/playlists/playlist_live_temp.pls > /home/ubuntu/ices/playlists/playlist_live_temp2.pls
mv /home/ubuntu/ices/playlists/playlist_live_temp2.pls /home/ubuntu/ices/playlists/playlist_live.pls

Los saludos y las frases se pueden editar según sea necesario.
La información/mensajes se recuperan desde un canal RSS a través del programa rsstail. Por favor, no olvide cambiar la dirección de la fuente RSS. Sólo se recuperará una entrada (la más reciente). Aquí también puede utilizar wget en su lugar para recuperar información de un sitio web en lugar de un feed RSS. Sin embargo, es posible que la información sólo esté disponible como texto sin formato.

Ahora agregue los permisos de archivo necesarios al shell script.

chmod +x /home/ubuntu/play_announcement.sh 



El shell script puede ejecutarse como cronjob, por ejemplo cada hora:

0 * * * * * /home/ubuntu/play_announcement.sh

O sólo se llamará si una página web contiene texto (por ejemplo, si se muestra un mensaje de error en lugar de una página vacía). Aquí como ejemplo en un script de shell:

ANNOUNCEMENTTEXT=$(su ran -c "wget -qO- \""https://WEBSITE.TLD\ARE_THERE_ANY_ERRORS"" ")

if [ ! -z "$ANNOUNCEMENTTEXT" ];
then
/home/ubuntu/play_announcement.sh 
fi

 

Otros casos de uso

Los anuncios también pueden estar disponibles a través de un podcast RSS.
Pero primero tienes que crear una plantilla para el feed RSS podcast. Y las entradas del podcast RSS se añaden automáticamente a través de un script shell. El shell script puede ser extendido por el shell script para el feed RSS podcast.

La adición automática de entradas de feeds de podcasts se puede hacer de la siguiente manera:

#iTunes RSS feed podcast entry
echo "<item>" > /var/www/WEBSITE/rss/podcast_temp
titel="<title>"
_dateinametitel=$(env TZ=Europe/London date +"%d-%m-%Y %HH00 - ")
titel+=$_dateinametitel
titel+="Nachrichten auf Deutsch"
titel+="</title>"

echo $titel >> /var/www/WEBSITE/rss/podcast_temp
echo "<description>Die aktuellsten Nachrichten aus Österreich und der Welt. Sowie auch Hightech-Nachrichten. Alles kurz und kompakt.</description>" >> /var/www/WEBSITE/rss/podcast_temp

titel="<link>http://WEBSITE.TLD/rss/podcast_de/files/"
titel+=$_dateinamejetzt
titel+=".mp3</link>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp

titel="<enclosure url=\"http://WEBSITE.TLD/rss/podcast/files/"
titel+=$_dateinamejetzt
titel+=".mp3\" length=\""
rm /var/www/WEBSITE/rss/podcast_laenge
wc -c < /var/www/WEBSITE/rss/podcast/files/$_dateinamejetzt.mp3 | tee /var/www/WEBSITE/rss/podcast_laenge

_laenge=`cat /var/www/WEBSITE/rss/podcast_laenge`
titel+=$_laenge
titel+="\" type=\"audio/mpeg\"/>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp

titel="<pubDate>"
_datum=$(env TZ=Europe/London date +"%a, %d %b %Y %T %z")
titel+=$_datum
titel+="</pubDate>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp

titel="<itunes:summary> Latest Announcement"
titel+=" - Folge: "
titel+=$(env TZ=Europe/London date +"%d-%m-%Y %HH00")
titel+="</itunes:summary>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp

titel="<itunes:subtitle> This is the latest Announcement"
titel+=" - Episode: "
titel+=$(env TZ=Europe/London date +"%d-%m-%Y %HH00")
titel+="</itunes:subtitle>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp

echo "<itunes:image href=\"http://WEBSITE.TLD/podcast_images/podcast_logo_cover.png\"/>" >> /var/www/WEBSITE/rss/podcast_temp
titel="<itunes:duration>"
titel+=$(mp3info -p "%02m:%02s\n" /var/www/WEBSITE/rss/podcast/files/$_dateinamejetzt.mp3)
titel+="</itunes:duration>"
echo $titel >> /var/www/WEBSITE/rss/podcast_temp


echo "</item>" >> /var/www/WEBSITE/rss/podcast_temp
echo "" >> /var/www/WEBSITE/rss/podcast_temp
sed '/PodcastEntries/ r /var/www/WEBSITE/rss/podcast_temp' /var/www/WEBSITE/rss/podcast.xml > /var/www/WEBSITE/rss/podcast_temp2
cp /var/www/WEBSITE/rss/podcast_temp2 /var/www/WEBSITE/rss/podcast.xml
rm /var/www/WEBSITE/rss/podcast_temp2

Sin embargo, se deben crear plantillas vacías para el feed RSS podcast. Donde hay un comentario con el texto "PodcastEntries" delante de las entradas del podcast.

Usamos cookies en nuestro sitio web. Algunas de ellas son esenciales para el funcionamiento del sitio, mientras que otras nos ayudan a mejorar el sitio web y también la experiencia del usuario (cookies de rastreo). Puedes decidir por ti mismo si quieres permitir el uso de las cookies. Ten en cuenta que si las rechazas, puede que no puedas usar todas las funcionalidades del sitio web.