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 du Mixer 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 type SourceDataLine (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 notre AudioControledPlayer. 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 graphique AudioControledPlayerGUI associée à notre objet AudioControledPlayer et permettant de manipuler graphiquement les contrôles présentés ci-dessus est disponible dans les sources.

Lecteur avancé

Valid XHTML 1.0!