l’API Java Sound
Contrôles et Mixer
Afin de réaliser un lecteur plus élaboré avec ajout de contrôles (volume, balance, ...), il est nécessaire d’introduire le lien entre les Mixer
et les contrôles.
Les contrôles

Les contrôles sont de trois types de base :
BooleanControl
: Contrôles n’ayant que deux valeurs possibles comme Mute (couper le son).FloatControl
: Contrôles prenant leur valeur dans l’ensemble des flottants comme le Gain.EnumControl
: Contrôles nécessitant plusieurs paramètres pour les représenter comme la Reverb.
Mixer et lignes associées
Tous les contrôles ne sont pas supportés par toutes les lignes et il est nécessaire de connaître celles qui supportent ces contrôles pour réaliser un lecteur audio avancé. Ces lignes étant dépendantes d’un Mixer, il est également important de connaître les Mixer sur lesquelles elles sont "branchées". Afin de connaître l’ensemble des lignes et Mixer proposées par le système on peut exécuter le code suivant :
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
public class TestMixer {
public static void main(String[] args) {
try {
//Recupération de la liste des Mixers à partir du système
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
//pour chaque mixer on va regarder ses caracteristiques
for(Mixer.Info a:mixerInfo){
System.out.println("\n\n"+a+" Description:"+a.getDescription());
System.out.println("--------------------------------");
Mixer mix=AudioSystem.getMixer(a);
//Visualisation dex controles supportés par chaque Mixer
for(Control c:mix.getControls()){
System.out.println("Controls supported by Mixer:");
System.out.println("\t"+c);
}
//Visualisation des SourceLine disponibles pour ce Mixer
for(Line.Info i :mix.getSourceLineInfo()){
System.out.println("\n"+i);
//Visualisation dex controles supportés par cette Line
System.out.println("Controls supported by Source Line:");
for(Control c:AudioSystem.getLine(i).getControls()){
System.out.println("\t"+c);
}
}
//Visualisation des TargetLine disponibles pour ce Mixer
for(Line.Info i :mix.getTargetLineInfo()){
System.out.println("\n"+i);
//Visualisation dex controles supportés par cette Line
System.out.println("Controls supported by Target Line:");
for(Control c:AudioSystem.getLine(i).getControls()){
System.out.println("\t"+c);
}
}
}
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
}
Voici un extrait de la sortie :
Java Sound Audio Engine, version 1.0 Description:Software mixer and synthesizer
--------------------------------
Controls supported by Mixer:
Reverb with current value: Acoustic Lab, early reflection delay 2000 ns,
early reflection intensity -2.0 dB,late deflection delay 8000 ns,
late reflection intensity -3.0 dB, decay time 280000
interface SourceDataLine supporting 8 audio formats
Controls supported by Source Line:
Master Gain with current value: 0.0 dB (range: -80.0 - 13.9794)
Mute Control with current value: False
Pan with current value: 0.0 (range: -1.0 - 1.0)
Sample Rate with current value: 44100.0 FPS (range: 0.0 - 48000.0)
interface Clip supporting 8 audio formats, and buffers of 0 to 4194304 bytes
Controls supported by Source Line:
Master Gain with current value: 0.0 dB (range: -80.0 - 13.9794)
Mute Control with current value: False
Pan with current value: 0.0 (range: -1.0 - 1.0)
Sample Rate with current value: 44100.0 FPS (range: 0.0 - 48000.0)
Les
Mixer
peuvent être de deux types :
- Matériels : intégrés au système.
- Logiciels.
Mixer
logiciel "Java Sound Engine" dispose d’un contrôle Reverb ainsi qu’une ligne de type SourceDataLine
disposant d’un certain nombre d’effets intéressants.
C’est sur l’exploitation de ce Mixer que portera l’exemple décrit dans la section Ajout de contrôles en lecture