diff --git a/chap/streaming.tex b/chap/streaming.tex index 9ad0d4a..f1e5b73 100644 --- a/chap/streaming.tex +++ b/chap/streaming.tex @@ -8,11 +8,14 @@ Avertissement : pour le moment\footnote{En juillet 2014}, nous n'allons nous pencher que sur la diffusion de flux audios, avec des encodages libres comme \textsl{ogg} ou \textsl{speex}. - Tout simplement parce que le monde de la vidéo est un gigantesque foutoir de codecs, de containers, de brevets logiciels et d'incompatiblités diverses et variées. +Une notion importante à bien comprendre, c'est l'organisation +du flux des sons immatériels au travers des intertubes. + +\textbf{insert picture here !}\index{XXX} %------------------------------------------------------------- \section{icecast2} @@ -261,6 +264,53 @@ pour arriver à tenter de comprendre pouquoi ça ne fonctionne pas, alors que tout semble correct. +%==================================================================== +\section{Gadgets} + +On peut aussi imaginer des \textsl{client sources} plus ésotériques. +L'exemple classique étant l'utilisation de la synthèse vocale pour +faire une horloge parlante. Mais comme tout vieux linuxien, j'attache +un intérêt tout particulier à une valeur symbolique~: +l'uptime de ma machine. +En ces temps troublés\footnote{Début janvier 2021, le collectif +d'artistes Mixart-Myrys, dont je fais partie depuis dix ans, +ext en train de se faire salemenr éjecter de son hangartistique. +À cette occasion, j'ai remonté \textit{à la rache} un Icecast, +et je l'ai voulu un peu surprent, d'où l'uptime parlé.}, +l'uptime, c'est important. + + +\lstinputlisting{code/say-uptime.sh} + +L'option \texttt{-p} de la commande \texttt{uptime} permet d'obtenir +une sortie de cette forme : \textsf{up 1 day, 1 hour, 37 minutes} +qu'une micromagie \texttt{sed} change en une forme plus correcte +syntaxiquement, bien qu'anglo-saxonne. + +La ligne suivante sert uniquement d'affichage de contrôle, et peut +être supprimée sans vergogne. + +\label{say-uptime} +Les trois lignes suivantes vont effectivement généré le son qui sera +envoyé vers la radio\index{radio} de l'Internet. + +Premier élémént du pipeline, \texttt{espeak-ng} reçoit le texte +par son \textsl{stdin} et génère le flux de +parole sur son \textsl{stdout}, à partir des options +\texttt{-g 9 -s 150 -a 133}, réglant la voix synthétique. +Ensuite, il faut que les échantillons sonores soient au format +physique attendu par le diffuseur, +d'où la conversion en 2$x$16 bits. Et pour finir, il est +encodé/encapsulé dans du OggVorbis\index{ogg} que le +\textsl{yuser} final ne pourra peut-être pas écouter sur +son \textsf{iPhone}. + +Quand à la dernière ligne \texttt{~/bin/sender} c'est un programme, +basé sur \texttt{libshout}, qui va gérer l'authentification et +le transfert des données vers un point d'entrée du serveur icecast. + +Voilà, c'est tout pour le moment. + %==================================================================== diff --git a/code/say-uptime.sh b/code/say-uptime.sh new file mode 100644 index 0000000..6b93daa --- /dev/null +++ b/code/say-uptime.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +GS=" -g 9 -s 150 -a 133 " + +# +# Rendez-nous notre Mixou ! +# +uptime -p | + sed 's/^up/My uptime is /' | + tee /dev/stderr | + espeak-ng $GS --stdout | + sox - -t wav -b 16 - remix 1 1 2> /dev/null | + oggenc --quiet - -o - | + ~/bin/sender > /dev/null