un debut assez timide...
This commit is contained in:
commit
21b246c244
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
log.*
|
||||||
|
|
||||||
|
main.aux
|
||||||
|
main.idx
|
||||||
|
main.ilg
|
||||||
|
main.ind
|
||||||
|
main.log
|
||||||
|
main.pdf
|
||||||
|
main.toc
|
||||||
|
|
17
Makefile
Normal file
17
Makefile
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# exemples du bouquin
|
||||||
|
|
||||||
|
ex_curses: ex_curses.c Makefile
|
||||||
|
gcc -Wall $< -o $@ -lncurses
|
||||||
|
|
||||||
|
|
||||||
|
TOTAR = chap/*.tex chap/*.png *.tex *.c Makefile *.sh *.awk
|
||||||
|
|
||||||
|
|
||||||
|
tarball: $(TOTAR)
|
||||||
|
date >> tarball
|
||||||
|
ls $(TOTAR) | sed 's/^/Ordinateur\//' > MANIFEST
|
||||||
|
( cd .. ; tar zcvf livre_ordinateur.tar.gz `cat Ordinateur/MANIFEST` )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
chap/alsamixer.png
Normal file
BIN
chap/alsamixer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
36
chap/backups.tex
Normal file
36
chap/backups.tex
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
\chapter{Backups}
|
||||||
|
|
||||||
|
\index{backup}
|
||||||
|
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
\section{Geb...}
|
||||||
|
|
||||||
|
Si tu fais tous tes tgz d'un coup, puis les copie, tous d'un coup, les
|
||||||
|
copier juste après les avoir générés permettrait d'éviter de les relire
|
||||||
|
(et potentiellement de paralléliser)
|
||||||
|
|
||||||
|
Si les fichiers sont gros (trop pour tenir en ram), et changent tous
|
||||||
|
les jours, scp à la place d'rsync sera vraisemblablement plus performant
|
||||||
|
(pas de comparaison de checksum sources / destinations, d'autant plus
|
||||||
|
important si c'est sur des répertoires entiers)
|
||||||
|
|
||||||
|
Je suppose que tu n'utilises pas rsync -z ? Sinon, il ne sert
|
||||||
|
vraisemblablement à rien, les fichiers étant déjà compréssés.
|
||||||
|
|
||||||
|
Si tu gzip plusieurs Go à chaque fois, et a plusieurs cores, pigz
|
||||||
|
(https://zlib.net/pigz/) devrait etre plus performant que gzip (tu peux
|
||||||
|
le ln -s / dpkg --divert à la place de gzip), le gain est quasi linéaire
|
||||||
|
par rapport au nombre de cores.
|
||||||
|
|
||||||
|
gzip, comme pigz permettent de régler le niveau de compression.
|
||||||
|
Généralement diminuer celui-ci raisonnablement impacte peu la taille des
|
||||||
|
fichiers générés mais énormément les temps d’exécution (et peut être la
|
||||||
|
mémoire).
|
||||||
|
|
||||||
|
La réactivité de ton système s'en ressent elle si tu lances tes
|
||||||
|
scripts à coup de nice -n10 ( / -n15 / -n20 ) sans que cela augmente
|
||||||
|
trop les temps de backup ?
|
||||||
|
|
||||||
|
Quid de juste rsync sur ton serveur et faire les tgz à l'autre bout
|
||||||
|
(tu profiteras ainsi pleinement du coté incrémental d'rsync) ?
|
81
chap/dino.tex
Normal file
81
chap/dino.tex
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
% ==============================================================
|
||||||
|
% TRUCS DE VIEUX
|
||||||
|
|
||||||
|
\chapter{trucs de dino}
|
||||||
|
|
||||||
|
Je vais, dans ce chapitre, parler de choses que les moins de vingt
|
||||||
|
ans ne peuvent pas connaitre. Des choses qui existaient
|
||||||
|
\textsl{bien avant} le Web\index{www} !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
\section{inetd}
|
||||||
|
\index{inetd}\label{inetd}
|
||||||
|
|
||||||
|
Aussi connu sous le nom de « superserveur Internet », ce démon
|
||||||
|
a fait ses premiers pas dans l'Unix 4.3BSD
|
||||||
|
et depuis est maintenant remplacé par
|
||||||
|
\texttt{xinetd}\index{xinetd},
|
||||||
|
décrit en page \pageref{xinetd}.
|
||||||
|
|
||||||
|
Inetd a pour but de gérer l'accès à des services réseaux,
|
||||||
|
qui peuvent être internes ou externes. Un service interne
|
||||||
|
est entièrement géré par Inetd : on y trouve par exempme
|
||||||
|
daytime qui permet de connaitre l'heure qu'il est à
|
||||||
|
l'autre bout du monde :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@plop:~$ grep daytime /etc/inetd.conf
|
||||||
|
daytime stream tcp nowait root internal
|
||||||
|
tth@plop:~$ nc uind.cispeo.fr daytime
|
||||||
|
29 JUL 2014 21:10:30 CEST
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Dans ce cas, c'est directement Inetd qui répond. Mais il sait
|
||||||
|
faire une autre chose, bien plus constructive :
|
||||||
|
toujours répondre à
|
||||||
|
un appel venant du grand Ternet, mais maintenanr nous allons
|
||||||
|
déléguer le traitement de la demande à un
|
||||||
|
autre participant.
|
||||||
|
|
||||||
|
Il ne reste plus qu'à le mettre en œuvre, en réutilisant
|
||||||
|
un exemple très ancien\footnote{Août 1998, lors d'une
|
||||||
|
réunion du CULTe, à Toulouse}, et très simple à
|
||||||
|
comprendre.
|
||||||
|
|
||||||
|
\subsection{qotd}
|
||||||
|
\index{qotd}
|
||||||
|
|
||||||
|
Le protocole « Quote Of The Day » (\texttt{qotd}) a été
|
||||||
|
normalise dans le \texttt{rfc865}, écrit en 1983 par John Postel.
|
||||||
|
Une rapide implémentation du moteur de quote peut être codée en Shell :
|
||||||
|
|
||||||
|
\index{fortune}
|
||||||
|
\begin{lstlisting}[language=sh]
|
||||||
|
#!/bin/sh
|
||||||
|
/usr/games/fortune -a -n 500
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Maintenant, il nous faut dire à Inetd d'appeler ce moteur
|
||||||
|
chaque fois qu'une connection tcp entrante arrive sur le
|
||||||
|
port 17.
|
||||||
|
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
\section{gopher}
|
||||||
|
\index{gopher}
|
||||||
|
|
||||||
|
Sur le port 70.
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
The Internet Gopher(tm) software and documentation is copyright (c)
|
||||||
|
1991, 1992, 1993, 1994 by the University of Minnesota.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
100
chap/gadgets.tex
Normal file
100
chap/gadgets.tex
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
\chapter{Gadgets}
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
\section{Fortune}
|
||||||
|
\index{fortune}
|
||||||
|
|
||||||
|
Un rapide petit exemple, avant de passer aux choses techniques :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@plop:~$ fortune
|
||||||
|
You will outgrow your usefulness.
|
||||||
|
tth@plop:~$ fortune
|
||||||
|
Future looks spotty. You will spill soup in late evening.
|
||||||
|
tth@plop:~$ fortune
|
||||||
|
You are deeply attached to your friends and acquaintances.
|
||||||
|
tth@plop:~$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Bref, vous voyez le principe : c'est un machin à raconter des
|
||||||
|
trucs plus ou
|
||||||
|
moins aléatoires\footnote{et jamais revenus, il faut bien le
|
||||||
|
préciser.}. Il y a tout un tas d'options intéressantes,
|
||||||
|
la principale étant \texttt{-o} pour avoir les fortunes
|
||||||
|
offensives\index{porn} qui peuvent choquer les âmes
|
||||||
|
sensibles.
|
||||||
|
|
||||||
|
Nous allons donc maintenant
|
||||||
|
le plier à notre volonté en créant nous même le contenu adéquat.
|
||||||
|
Pour cela, nous devons tout d'abord préparer un fichier texte
|
||||||
|
contenant tous nos aphorismes, séparés par une ligne
|
||||||
|
contenant uniquement le caractère \texttt{\%}.
|
||||||
|
|
||||||
|
Ensuite, il faut utiliser \texttt{strfile}\index{strfile} qui
|
||||||
|
va préparer une version indexée de notre fichier texte afin
|
||||||
|
qu'il soit utilisable par fortune.
|
||||||
|
|
||||||
|
Le pendant graphique est \texttt{xcowsay}.
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
\section{/usr/games/}
|
||||||
|
|
||||||
|
On trouvera dans ce répertoire une collections de jeux anciens,
|
||||||
|
dont certains datent d'une époque où la \texttt{vt102} était
|
||||||
|
un terminal de luxe.
|
||||||
|
Certains remontent même à l'antique Unix de Berkeley\index{BSD}.
|
||||||
|
Et quelques-uns d'entre eux sont devenus, au fil du temps, de
|
||||||
|
grands classiques.
|
||||||
|
|
||||||
|
\subsection{les générateurs}
|
||||||
|
|
||||||
|
\index{morse}\index{ppt}
|
||||||
|
|
||||||
|
Les décideurs pressés seront heureux de pouvoir enrichir leurs
|
||||||
|
PointPuissant\index{beamer} avec de très écoles-anciennes messages
|
||||||
|
cryptiques avec ces quelques outils ergonomiques et pipelinables
|
||||||
|
avec d'autres fidèles serviteurs.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@plop $ morse -s we make porn | tr '\n' ' ' ; echo
|
||||||
|
.-- . -- .- -.- . .--. --- .-. -. ...-.-
|
||||||
|
tth@plop $ ppt we make porn | tr 'o' '*'
|
||||||
|
___________
|
||||||
|
| *** .***|
|
||||||
|
| ** .* *|
|
||||||
|
| * . |
|
||||||
|
| ** *.* *|
|
||||||
|
| ** . *|
|
||||||
|
| ** *. **|
|
||||||
|
| ** .* *|
|
||||||
|
| * . |
|
||||||
|
| *** . |
|
||||||
|
| ** *.***|
|
||||||
|
| *** . * |
|
||||||
|
| ** *.** |
|
||||||
|
___________
|
||||||
|
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Certains esprits ouverts pensent que
|
||||||
|
\texttt{fortune}\index{fortune} est aussi un
|
||||||
|
générateur de données futilement complexes.
|
||||||
|
D'autres songent à MXDoctor\index{emacs} ou Camélia.
|
||||||
|
|
||||||
|
\subsection{Les animations}
|
||||||
|
|
||||||
|
Ahem, là, c'est délicat, parce que je ne sais pas
|
||||||
|
vraiment\footnote{Enfin, si, j'essaye de confectionner
|
||||||
|
un soft pour fabriquer des flipbooks à partir de portnawak}
|
||||||
|
d'animation imprimable.
|
||||||
|
|
||||||
|
|
||||||
|
% ===============================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
202
chap/son.tex
Normal file
202
chap/son.tex
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
\chapter{Son}
|
||||||
|
\label{Son}
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{ALSA}
|
||||||
|
\index{ALSA}
|
||||||
|
|
||||||
|
ALSA, \textit{Advanced Linux Sound Architecture}, gère
|
||||||
|
à peu près correctement les entrées/sorties sonores
|
||||||
|
d'une machine Linux, aussi bien en audio qu'en
|
||||||
|
\textsc{midi}\footnote{Voir page \pageref{MIDI}
|
||||||
|
pour en savoir plus.}.
|
||||||
|
|
||||||
|
Nous allons faire le tour de quelques outils associés.
|
||||||
|
En premier, le « centre de contrôle »,
|
||||||
|
\texttt{alsamixer}, dont la qualitée de l'interface
|
||||||
|
en Curses\index{curses} est époustouflante :
|
||||||
|
|
||||||
|
\begin{figure}[h]
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=0.50]{chap/alsamixer}
|
||||||
|
\caption{Alsamixer}
|
||||||
|
\end{center}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Ensuite, nous avons \texttt{aplay} et \texttt{arecord},
|
||||||
|
qui permettent d'écouter et d'enregistrer les sets de
|
||||||
|
James Lewis\footnote{Que ça, c'est de la noise !}.
|
||||||
|
|
||||||
|
\subsection{arecord}
|
||||||
|
|
||||||
|
Si vous avez plusieurs cartes son, la sélection du
|
||||||
|
\textsl{device} est assez piégeuse~: ce n'est pas
|
||||||
|
l'option \texttt{-l} qui vous donnera la bonne piste,
|
||||||
|
mais \texttt{-L} à utiliser.
|
||||||
|
|
||||||
|
\subsection{Le reste}
|
||||||
|
|
||||||
|
Et quand on regarde par la lorgnette du programmeur, on découvre
|
||||||
|
rapidement que l'utilisation d'ALSA n'est pas si simple que
|
||||||
|
ça, essentiellement à cause d'une documentation spartiate.
|
||||||
|
Heurensement, pour certains domaines, il existe des
|
||||||
|
surcouches plus simple d'emploi : \texttt{libao}\index{libao}
|
||||||
|
pour les sorties
|
||||||
|
sonores, XXX\index{XXX} pour le reste.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
\section{pulseaudio}
|
||||||
|
\index{pulseaudio}
|
||||||
|
\label{pulseaudio}
|
||||||
|
|
||||||
|
On avait pourtant dit « \textbf{pas de trolls} », mais il va quand
|
||||||
|
même falloir y passer : ce machin prétenduement
|
||||||
|
\textsl{michu compliant}\index{Michu}
|
||||||
|
a parfois, voire même souvent, tendance à se mettre en travers
|
||||||
|
du chemin des honnètes gens.
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
\section{Jack}
|
||||||
|
\index{Jack}
|
||||||
|
|
||||||
|
Jack Audio Connection Kit : ce sous-système\footnote{Dans le monde
|
||||||
|
Linux, on aime bien les sous-systèmes pour le son.} est
|
||||||
|
destiné avant tout aux professionnels de la musique.
|
||||||
|
Je vais attendre le retour de mon spécialiste préféré pour
|
||||||
|
lui laisser le soin d'en parler.
|
||||||
|
|
||||||
|
Jack peut aussi servir de source sonore pour
|
||||||
|
darkice\index{darkice}, lequel pourra feeder un
|
||||||
|
Icecast\index{icecast}
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{libsndfile}
|
||||||
|
\label{libsndfile}
|
||||||
|
\index{libsndfile}
|
||||||
|
|
||||||
|
Libsndfile est essentiellement une très complète bibliothèque
|
||||||
|
de lecture/écriture de fichiers sons.
|
||||||
|
Elle permet de gérer facilement un nombre
|
||||||
|
considérable de formats de fichiers\footnote{Mais ceci est une autre
|
||||||
|
histoire, que nous verrons peut-être un de ces jours\dots}.
|
||||||
|
|
||||||
|
Par contre, elle arrive avec une floppée d'outils en ligne de
|
||||||
|
commande, dont certains sont assez performants.
|
||||||
|
|
||||||
|
Citons, entre autres, \texttt{sndfile-resample} qui est un
|
||||||
|
convertisseur de
|
||||||
|
fréquence d'échantillonage très performant.
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{libao}
|
||||||
|
\label{libao}
|
||||||
|
\index{libao}
|
||||||
|
|
||||||
|
C'est une bibliothèque de fonctions pour gérer les sorties sonores
|
||||||
|
d'une application
|
||||||
|
(\textsl{Libao is a cross-platform audio library that allows programs
|
||||||
|
to output audio using a simple API on a wide variety of platforms.}).
|
||||||
|
Elle supporte une grande variété de formats.
|
||||||
|
|
||||||
|
\lstinputlisting[language=C]{ao_example.c}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{Ladspa}
|
||||||
|
\index{ladspa}
|
||||||
|
|
||||||
|
Ladspa, mais c'est quoi ? C'est l'acronyme de
|
||||||
|
« Linux Audio Developers Simple Plugin API », ou, en français :
|
||||||
|
« machin avancé ».
|
||||||
|
|
||||||
|
|
||||||
|
La commande \texttt{listplugins}, comme son nom l'indique, fournit
|
||||||
|
la liste de tous les plugins accessibles.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{Sox}
|
||||||
|
\index{Sox} \label{Sox}
|
||||||
|
|
||||||
|
Sox est le « couteau suisse » des manipulateurs de données
|
||||||
|
sonores. Sa documentation étant assez ésotérique, je vais
|
||||||
|
faire comme d'hab' : présenter des exemples.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Conversions}
|
||||||
|
|
||||||
|
Nous avons un process quelconque qui nous délivre des données
|
||||||
|
en format texte, tel que celles-ci, deux valeurs par ligne,
|
||||||
|
normalisées dans l'intervalle $]-1,1[$, et nous voulons obtenir
|
||||||
|
un .Wav vanille.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
0.286498189155 0.33310689881
|
||||||
|
0.0500751550941 -0.326965910932
|
||||||
|
-0.01317994812 -0.392365740013
|
||||||
|
-0.353560435178 -0.018978716441
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Voici comment faire dans un contexte de \textit{Makefile} :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
random.wav: random.dat Makefile
|
||||||
|
@echo " conversion " $< $@
|
||||||
|
sox --rate 44100 $< $@
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\subsection{Génération}
|
||||||
|
|
||||||
|
play -n synth sine 480 sine 620 remix 1-2 fade 0 0.5 delay 0.5 repeat 5
|
||||||
|
|
||||||
|
\subsection{Traitements}
|
||||||
|
|
||||||
|
\texttt{sox --norm source.wav normal.wav} pour normaliser un son.
|
||||||
|
|
||||||
|
\texttt{sox left.wav right.wav -M stereo.wav} pour combiner deux
|
||||||
|
voies mono en un fichier stéréo. \texttt{-M} est l'abréviation
|
||||||
|
de \texttt{--combine merge}.
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
\section{espeak}
|
||||||
|
\index{espeak}
|
||||||
|
|
||||||
|
Logiciel de synthèse vocale.
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@plop:~/RADIO$ espeak --voices=fr
|
||||||
|
Pty Language Age/Gender VoiceName File Other Langs
|
||||||
|
5 fr M french fr
|
||||||
|
7 fr M french-mbrola-1 mb/mb-fr1
|
||||||
|
7 fr F french-mbrola-4 mb/mb-fr4
|
||||||
|
5 fr-be M french (Belgium) fr-be
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
\section{Pour finir...}
|
||||||
|
|
||||||
|
En conclusion, le son avec Linux, c'est un peu la grande foire.
|
||||||
|
On arrive parfois même à y voir du
|
||||||
|
XML\index{XML} dedans et c'est en page \pageref{icecast2}
|
||||||
|
pour les courageux. On peut aussi carrément utiliser un langage
|
||||||
|
spécialisé comme \textit{liquidsoap}\index{liquidsoap}.
|
||||||
|
|
||||||
|
|
||||||
|
%------------------------------------------------------------------
|
||||||
|
|
201
chap/streaming.tex
Normal file
201
chap/streaming.tex
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
%
|
||||||
|
% new 24 juillet 2014 - Mixart Myrys
|
||||||
|
%
|
||||||
|
\chapter{streaming}
|
||||||
|
\label{streaming}
|
||||||
|
\index{streaming}
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
\section{icecast2}
|
||||||
|
\index{icecast2}
|
||||||
|
\label{icecast2}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Icecast, the project, is a collection of programs and libraries for
|
||||||
|
streaming audio over the Internet. This includes:
|
||||||
|
Icecast, the program that streams audio data to listeners,
|
||||||
|
libshout, a library for communicating with Icecast servers and
|
||||||
|
IceS\index{ices}, a program that sends audio data to Icecast servers
|
||||||
|
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
Icecast est, semble-t-il, \textbf{le} serveur de stream de référence.
|
||||||
|
Il se configure facilement avec des fichiers en XML\index{XML}.
|
||||||
|
Première approche d'une ergonomie différente, vous êtes avertis.
|
||||||
|
|
||||||
|
\textsl{more to come...}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
\section{idjc}
|
||||||
|
\index{idjc}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Internet DJ Console is an Internet radio application for making a
|
||||||
|
live radio show or podcast. Features include two main media players
|
||||||
|
with a crossfader, a jingle player, microphone signal processing
|
||||||
|
(compressor and noise gate)
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
\section{liquidsoap}
|
||||||
|
\index{liquidsoap}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Liquidsoap is an extensible and flexible audio stream generator, mainly
|
||||||
|
used for streaming to a shoutcast/icecast server.
|
||||||
|
It is also possible
|
||||||
|
to output in a file, to speakers or as raw PCM stream.
|
||||||
|
liquidsoap can
|
||||||
|
perform any audio processing, mixing streams together,
|
||||||
|
applying filters, generating sound procedurally,
|
||||||
|
there is no limit but your imagination.
|
||||||
|
Input files can be accessed through the network, using samba,
|
||||||
|
ftp or speech synthesis.
|
||||||
|
The system features lots of programming operators, including user
|
||||||
|
requests, time-based selection, sum...
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
Un étonnant langage de script pour gérer tous ces octets musicaux
|
||||||
|
en les promenant un peu dans tous les sens, la possibilité
|
||||||
|
de commander Savonet avec un simple telnet\index{telnet}.
|
||||||
|
Vite, un exemple d'utilisation, vous créez un fichier texte avec
|
||||||
|
cez quelques lignes dedans et vous le sauvez sous le nom
|
||||||
|
\texttt{savon.liq} :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
set("log.file.path","/tmp/savon.log")
|
||||||
|
set("log.stdout",true)
|
||||||
|
|
||||||
|
output.icecast (%vorbis,
|
||||||
|
host = "10.20.0.23",
|
||||||
|
port = 1984,
|
||||||
|
password = "hopla!",
|
||||||
|
mount = "savon.ogg",
|
||||||
|
single("loveme.ogg"))
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Avec ce petit programme, nous pouvons envoyer en boucle un fichier
|
||||||
|
Ogg vers notre serveur.
|
||||||
|
Les deux premières lignes permettent de voir et d'enregistrer les
|
||||||
|
diverses actions.
|
||||||
|
Et la grosse instruction \texttt{output.icecast}
|
||||||
|
envoie la musique dans votre serveur
|
||||||
|
Icecast2 en passant les paramètres nécessaires.
|
||||||
|
|
||||||
|
\subsection{10.20.0.23}
|
||||||
|
|
||||||
|
|
||||||
|
Maintenant, voyons un exemple plus complet et plus réaliste,
|
||||||
|
largement inspiré d'un tutoriel de la documentation officielle,
|
||||||
|
et qui deviendra un de ces jours la base de Radio-Myrys :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
set("log.file.path", "/tmp/savon.log")
|
||||||
|
set("log.stdout", false)
|
||||||
|
|
||||||
|
default = single("loveme.ogg")
|
||||||
|
|
||||||
|
openbsd = playlist(mode="random", "files/openbsd.pls")
|
||||||
|
others = playlist(mode="random", "files/others.pls")
|
||||||
|
jingles = playlist( "files/jingles.pls")
|
||||||
|
|
||||||
|
radio = fallback([ switch([({ 5h-11h }, openbsd),
|
||||||
|
({ 11h-5h }, others)]),
|
||||||
|
default])
|
||||||
|
|
||||||
|
radio = random(weights=[1,12],[ jingles, radio ])
|
||||||
|
|
||||||
|
output.icecast( %vorbis,
|
||||||
|
host = "localhost",
|
||||||
|
port = 1984,
|
||||||
|
password = "hopla!",
|
||||||
|
mount = "savon.ogg",
|
||||||
|
radio)
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Ah bah oui, ça commence à être robuste, mais en fait c'est
|
||||||
|
assez simple à comprendre, et un peu plus compliqué à mettre
|
||||||
|
en œuvre.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
On se retrouve vite face à un problème classique :
|
||||||
|
les différences de niveau sonore entre les divers morceaux.
|
||||||
|
Et comme on veut avancer sur d'autres choses, on rache un
|
||||||
|
petit bout de Bash avec de la poudre verte dedans :
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
#!/bin/bash/
|
||||||
|
echo "que faire ?"
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Cette poudre verte pourrait bien être \texttt{vorbisgain(1)}\dots
|
||||||
|
|
||||||
|
\subsection{rotation des playlists}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
pl2014 = playlist("2014")
|
||||||
|
pl2013 = playlist("2013")
|
||||||
|
...
|
||||||
|
jingles = playlist("jingles")
|
||||||
|
s = rotate([pl2014, pl2013, ..., jingles])
|
||||||
|
output.icecast(..., s)
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{trucs divers}
|
||||||
|
|
||||||
|
Que signifie ce message : \textbf{That source is fallible.} ?
|
||||||
|
Par exemple, que le fichier que vous aviez soigneusement
|
||||||
|
désigné comme \texttt{default} n'existe plus sur le disque.
|
||||||
|
|
||||||
|
|
||||||
|
Comment envoyer vers plusieurs icecasts ? Bah c'est très facile :
|
||||||
|
il suffit de mettre plusieurs "blocs" \texttt{output.icecast} à
|
||||||
|
la suite les uns des autres ;)
|
||||||
|
|
||||||
|
|
||||||
|
%====================================================================
|
||||||
|
\section{Source clients}
|
||||||
|
\label{sourceclients}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
|
||||||
|
\subsection{Ezstream}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
Ezstream is an audio and video streaming client which feeds any
|
||||||
|
icecast server with audio data and metadata from a standard input
|
||||||
|
without reencoding. It thus requires very little CPU resources. Some
|
||||||
|
playlists can be looped and composed with MP3, Ogg Vorbis or Ogg
|
||||||
|
Theora media files.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
|
||||||
|
\subsection{darkice}
|
||||||
|
\index{darkice}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
DarkIce as a live audio streamer. It records audio from an audio
|
||||||
|
interface (e.g. sound card), encodes it and sends it to a streaming server.
|
||||||
|
\end{quote}
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
\subsection{VLC}
|
||||||
|
\index{vlc}
|
||||||
|
|
||||||
|
|
||||||
|
%====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
%-------------------------------------------------------------
|
||||||
|
|
10
go.sh
Executable file
10
go.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
pdflatex main
|
||||||
|
makeindex main
|
||||||
|
pdflatex main
|
||||||
|
|
||||||
|
date >> log.toto
|
||||||
|
|
||||||
|
|
106
main.tex
Normal file
106
main.tex
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
\documentclass[a4paper,11pt,openany]{book}
|
||||||
|
|
||||||
|
\usepackage[francais]{babel}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
\usepackage{xspace}
|
||||||
|
\usepackage{makeidx}
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\usepackage{listings}
|
||||||
|
|
||||||
|
\makeindex
|
||||||
|
|
||||||
|
\setlength \parindent {2em}
|
||||||
|
|
||||||
|
% XXX \setlength \parskip {0.333em}
|
||||||
|
|
||||||
|
%------ reglages des 'listings'
|
||||||
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
|
\lstset{aboveskip=1em,belowskip=1em}
|
||||||
|
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\title{Utiliser pleinement mon ordinateur}
|
||||||
|
\author{Thierry (aka tTh) Boudet}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\maketitle
|
||||||
|
% ==============================================================
|
||||||
|
\chapter{Introduction}
|
||||||
|
|
||||||
|
Un nouveau nouvel ouvrage, en vrac, complètement coronavraqué.
|
||||||
|
Des notes informelles sur l'utilisation
|
||||||
|
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
||||||
|
Mais elles sont en vrac.
|
||||||
|
|
||||||
|
Tout cette ouvrage a été écrit avec mousepad et \LaTeX{}
|
||||||
|
selon la méthode éprouvée dite
|
||||||
|
de «~La~Rache~», essentiellement sur une machine Debian/amd64.
|
||||||
|
|
||||||
|
Your mileage may vary\dots
|
||||||
|
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
{
|
||||||
|
\setlength \parskip {0pt}
|
||||||
|
\tableofcontents
|
||||||
|
}
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
% \input{chap/textes}
|
||||||
|
% \input{chap/editeurs}
|
||||||
|
% \input{chap/X11}
|
||||||
|
\input{chap/son}
|
||||||
|
% \input{chap/musique}
|
||||||
|
% \input{chap/puredata}
|
||||||
|
% \input{chap/MIDI}
|
||||||
|
\input{chap/backups}
|
||||||
|
|
||||||
|
% \input{chap/processing}
|
||||||
|
% \input{chap/video}
|
||||||
|
% \input{chap/webcam}
|
||||||
|
% \input{chap/SCSI}
|
||||||
|
\input{chap/dino}
|
||||||
|
% \input{chap/MINITEL}
|
||||||
|
% \input{chap/threads}
|
||||||
|
% \input{chap/dosbox}
|
||||||
|
% \input{chap/photos}
|
||||||
|
% \input{chap/reseau}
|
||||||
|
% \input{chap/IRC}
|
||||||
|
% \input{chap/Usenet}
|
||||||
|
% \input{chap/DNS}
|
||||||
|
% \input{chap/ssh}
|
||||||
|
% \input{chap/hardware}
|
||||||
|
\input{chap/streaming}
|
||||||
|
\input{chap/gadgets}
|
||||||
|
% \input{chap/slang}
|
||||||
|
% \input{chap/curses}
|
||||||
|
% \input{chap/WiFi}
|
||||||
|
% \input{chap/GIT}
|
||||||
|
% \input{chap/divers}
|
||||||
|
% \input{chap/peer2peer}
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
|
||||||
|
\chapter{On est bientôt arrivé ?}
|
||||||
|
|
||||||
|
Non, la route est longue, mais la voie est libre.
|
||||||
|
|
||||||
|
|
||||||
|
\printindex
|
||||||
|
|
||||||
|
|
||||||
|
% ==============================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\end{document}
|
||||||
|
|
||||||
|
|
||||||
|
|
4
numberlines.awk
Executable file
4
numberlines.awk
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/awk -f
|
||||||
|
|
||||||
|
{ printf "%5d\t%s\n", NR, $0; }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user