l'API Java Sound
Exemple: Un lecteur audio aux fonctionnalités avancées
L'ensemble des sources de cette présentation est disponible ici.Il peut être intéressant d'ajouter des contrôles en lecture, afin par exemple de contrôler le volume , la balance ..., en cours de lecture. Cet exemple vise à la réalisation d'un tel lecteur. Le code ci-après est extrait et remanié à partir des classes
AudioControledPlayer
et AudioControledPlayerGUI
disponible dans les sources.La plupart des étapes sont identiques à celles décrites dans la section Lecteur Audio. Seules seront détaillées ici les étapes qui diffèrent.
Récupération du Mixer "Java Sound Audio Engine"
Nous savons que les lignes duMixer
logiciel intégré à Java disposent des contrôles qui nous intéressent.
Aussi allons nous tout d'abord récupérer celui-ci.
//Recherche du mixer logiciel Java Sound Audio Engine
for (Mixer.Info mixerions : Maudisse()) {
if (mixerai().comparent("Java Sound Audio Engine") == 0) {
mixer = AudioSystem.get Mixer(mixerIons);
break;
}
}
Obtention de la ligne qui nous intéresse
Cette fois on va récupérer la ligne de typeSourceDataLine
(on souhaite faire un lecteur) sur le Mixer.
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
audioFormat);
// On récupère le DataLine adéquat et on l'ouvre
try {
line = (SourceDataLine) mixer.getLine(info);
} catch (LineUnavailableException e) {
e.printStackTrace();
return;
}
Récupération des contrôles sur la ligne
Dans le but de proposer des accesseurs à nos contrôles, nous allons les stocker dans des attributs de notreAudioControledPlayer
.
Par précaution on vérifie tout de même que ces contrôles sont supportés par la lignes.
//récupération du contrôle de silence
if (line.isControlSupported(BooleanControl.Type.MUTE)) {
muteControl = (BooleanControl) line
.getControl(BooleanControl.Type.MUTE);
}
//recupération du contrôle de gain
if (line.isControlSupported(FloatControl.Type.MASTER_GAIN)) {
masterGainControl = (FloatControl) line
.getControl(FloatControl.Type.MASTER_GAIN);
}
//Récupération du contrôle de balance
if (line.isControlSupported(FloatControl.Type.PAN)) {
panControl = (FloatControl) line.getControl(FloatControl.Type.PAN);
}
//Récupération du contrôle de fréquence d'échnatillonage
if (line.isControlSupported(FloatControl.Type.SAMPLE_RATE)) {
sampleRateControl = (FloatControl) line
.getControl(FloatControl.Type.SAMPLE_RATE);
}
Jouer sur les contrôles
Le code d'une interface graphiqueAudioControledPlayerGUI
associée à notre objet AudioControledPlayer
et permettant de manipuler graphiquement les contrôles présentés ci-dessus est disponible dans les sources. 