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