un debut assez timide...
This commit is contained in:
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}.
|
||||
|
||||
|
||||
%------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user