Une collection de notes diverses sur des trucs et astuces pour faire des choses avec un ordinateur...
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

202 lines
5.8 KiB

\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}.
%------------------------------------------------------------------