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