203 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \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}.
 | |
| 
 | |
| 
 | |
| %------------------------------------------------------------------
 | |
| 
 |