Comment utiliser un script shell pour faire des annonces automatiques en format audio. Ceci peut être utilisé, par exemple, pour émettre automatiquement des messages d'erreur (de services, d'applications), des messages ou la météo via une interface audio (par exemple : station de radio Internet dans l'intranet ou l'Internet, podcast RSS, etc).
Un cas d'utilisation est ici montré où ce script shell crée et émet automatiquement des annonces sur un flux radio. Ce cas d'utilisation est similaire aux annonces que vous entendez à l'aéroport ou à la gare. Quelque chose de similaire est implémenté ici via un serveur de streaming Icecast2, qui peut également être utilisé dans le réseau local pour diffuser des messages au format audio sur des haut-parleurs à domicile ou dans l'entreprise.
Il peut aussi utiliser ce script shell, s'il édite quelque chose, pour d'autres cas d'utilisation.
Conditions préalables
Ce qui suit doit être configuré avant de créer le script shell:
1. Si vous souhaitez accéder à des informations ou des messages via RSS: Le programme RSStail
Peut être installé via le gestionnaire de paquets apt: sudo apt-get install rsstail
En savoir plus sur rsstail: http://manpages.ubuntu.com/manpages/xenial/man1/rsstail.1.html
2. Serveur de streaming radio Internet (configuré avec icecast2 et ices) avec streaming fonctionnel
Ceci est utilisé ici comme support pour la sortie des annonces créées. La radio Internet est ici silencieuse et ne joue rien, sauf lorsque des messages doivent être émis.
Il y a aussi un tutoriel sur la façon de configurer le serveur de streaming radio Internet sur ce site:
Attention! Dans ce cas, la liste de lecture ne doit contenir qu'un fichier audio qui ne produit pas de son. Vous pouvez télécharger et utiliser ce fichier audio ici : https://ard-site.net/downloads/mute_state.mp3
La liste de lecture playlist_live.pls est utilisée ici, qui contient uniquement le fichier mute_state.mp3.
3. Le programme: jq
Un programme pour sortir les valeurs et le contenu des fichiers JSON. Utilisé dans ce cas pour l'affichage de la météo.
Peut être installé via le gestionnaire de paquets apt: sudo apt-get install jq
En savoir plus sur jq: http://manpages.ubuntu.com/manpages/bionic/man1/jq.1.html
4. Le logiciel de synthèse vocale (Text-to-speak): gtts
Le Gtts peuvent être téléchargés via le gestionnaire de paquets pip ou sur le site web pypi (https://pypi.org/project/gTTS/)
Il y a un tutoriel ici sur le site web sur la façon d'installer ce logiciel text-to-speak.
5. Si vous voulez ajouter de la musique d'intro pour les annonces: ffmpeg
Peut être installé via le gestionnaire de paquets apt: sudo apt-get install ffmpeg
6. Le fichier audio announcement_intro.mp3
Ce fichier audio est la musique d'intro qui est jouée avant l'annonce. Il ne peut être qu'au format mp3.
7. Une liste de lecture avec uniquement le fichier audio de l'annonce
Une playlist announcement_playlist.pls est créée ici. Il ne contient que le fichier /home/ubuntu/announcement.mp3
Le script shell
- Le texte à éditer en audio se trouve ici dans le fichier: /home/ubuntu/announcement_text.txt
- Les messages/informations d'un flux RSS sont stockés dans ce fichier: /home/ubuntu/announcement_information.txt
Le compte utilisateur ubuntu est utilisé ici. Il se peut que vous ayez besoin d'apporter quelques modifications au script. Le script shell s'exécute en tant que root ici.
Créer un script shell
vim /home/ubuntu/play_announcement.sh
Le script shell a le contenu suivant:
#!/bin/sh
#Bonjour
greetingtext="This is an important communication. "
echo $greetingtext > /home/ubuntu/announcement_text.txt
#L'heure
_timetext="It is "
_timetext+=$(env TZ=Europe/London date +"%-H")
_timetext+="O Clock."
echo $_timetext >> /home/ubuntu/announcement_text.txt
#Récupérer les messages/informations à éditer - Titre et description d'une entrée de rss 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
#Texte de fermeture
endtext="Thank you very much for your attention. "
echo $endtext >> /home/ubuntu/announcement_text.txt
#Convertir le texte en fichier audio - Veuillez ajuster la langue si nécessaire
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 'fr' -o /home/ubuntu/announcement_temp.mp3"
#Rendre le fichier audio plus fort
ffmpeg -i /home/ubuntu/announcement_temp.mp3 -filter:a "volume=16dB" -b:a 128k /home/ubuntu/announcement_temp2.mp3
#Ajouté une musique d'intro - Le fichier fini est maintenant dans: /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
#Lisez maintenant le fichier audio dans le flux radio Internet
#Remplacez la liste de lecture actuelle par la liste de lecture de l'annonce - la commande mv ne pose aucun problème pendant que le flux est lancé.
_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
#Jouez maintenant la playlist de l'annonce
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
#Annonce diffusée - Pendant l'annonce en cours, la liste de lecture normale est restaurée. L'annonce ne sera diffusée qu'une seule fois. Après l'annonce, la liste de lecture normale continue.
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
Les messages d'accueil et les phrases peuvent être modifiés au besoin.
Les informations/messages sont récupérés à partir d'un flux RSS via le programme rsstail. N'oubliez pas de changer l'adresse du flux RSS. Une seule entrée (la plus récente) sera récupérée. Ici, vous pouvez également utiliser wget à la place pour récupérer des informations d'un site Web au lieu d'un flux RSS. Toutefois, l'information ne peut alors être disponible que sous forme de texte non formaté.
Ajoutez maintenant les permissions de fichier requises au script shell.
chmod +x /home/ubuntu/play_announcement.sh
Le script shell peut s'exécuter comme cronjob par exemple: toutes les heures
0 * * * * * /home/ubuntu/play_announcement.sh
Ou n'être appelé que si une page Web contient du texte (par exemple : si un message d'erreur s'affiche au lieu d'une page vide). Voici un exemple dans un script shell:
ANNOUNCEMENTTEXT=$(su ran -c "wget -qO- \""https://WEBSITE.TLD\ARE_THERE_ANY_ERRORS"" ")
if [ ! -z "$ANNOUNCEMENTTEXT" ];
then
/home/ubuntu/play_announcement.sh
fi
Autres cas d'utilisation
Les annonces peuvent également être diffusées au moyen d'un fil de baladodiffusion RSS.
Mais vous devez d'abord créer un modèle pour le flux RSS-Podcastfeed. Et les entrées du flux podcast RSS sont automatiquement ajoutées via un script shell. Le script shell peut être étendu par le script shell du flux podcast RSS.
L'ajout automatique d'entrées de flux podcast peut se faire comme suit:
#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
Cependant, il faut créer des modèles vides pour le flux RSS podcast. Lorsqu'il y a un commentaire avec le texte "PodcastEntries" devant les entrées du flux podcast.