Astuce Java 24: Comment lire de l'audio dans les applications

La lecture de fichiers audio dans les applications Java n'est pas officiellement prise en charge dans la version actuelle de Java. Mais n'ayez crainte, il y a un moyen! Cette astuce vous montrera comment - en commençant par une description des étapes de base impliquées dans la lecture de clips audio dans des applets Java, puis en passant à la prise en charge des applications Java.

La lecture de clips audio dans des applets est assez simple et implique les étapes suivantes:

  • Créer un objet AudioClip
  • Charger le fichier son .au dans AudioClip
  • Jouez des sons une fois ou en boucle en continu
  • Arrêter la lecture

Voici à quoi ressemble le code de ces étapes:

import java.applet. *; AudioClip ac = getAudioClip (getCodeBase (), soundFile); ac.play (); // joue une fois ac.stop (); // arrête de jouer ac.loop (); // jouer en continu

Il semblerait logique d'utiliser ce même code pour lire des clips audio dans une application Java. Malheureusement, si vous faites cela, vous obtiendrez des erreurs du compilateur. Pourquoi? Parce que l' AudioClipobjet et la getAudioClip()méthode font partie du package java.applet - et ne font pas partie des applications. La bonne nouvelle est que nous pouvons plonger et faire fonctionner les choses nous-mêmes.

L'astuce pour résoudre ce problème consiste à utiliser certaines fonctionnalités non documentées fournies par Sun dans son JDK. En jetant un coup d'œil dans le fichier classes.zip du Sun JDK (en utilisant l'un des différents utilitaires zipfile), nous trouvons non seulement les packages Java standard tels que java.applet mais aussi sun.audio . (Ils se trouvent dans le répertoire sun / audio.)

Le package sun.audio contient tout ce dont nous avons besoin pour pouvoir lire des clips audio! Voici le code:

import sun.audio. *; // importer le package sun.audio import java.io. *; // ** ajoutez ceci dans votre code d'application selon le cas // Ouvrez un flux d'entrée dans le fichier audio. InputStream in = new FileInputStream (nom de fichier); // Crée un objet AudioStream à partir du flux d'entrée. AudioStream as = new AudioStream (in); // Utilisez le membre de classe statique "player" de la classe AudioPlayer pour lire // le clip. AudioPlayer.player.start (as); // De même, pour arrêter l'audio. AudioPlayer.player.stop (comme);

Pour utiliser une URL comme source de flux audio, remplacez le flux d'entrée et la configuration du flux audio par ce qui suit:

AudioStream as = new AudioStream (url.openStream ()); 

La lecture du flux audio en continu ajoute un peu plus de complexité:

// Créer un flux audio comme indiqué précédemment. // Créer une source AudioData. Données AudioData = as.getData (); // Créer ContinuousAudioDataStream. ContinuousAudioDataStream cas = nouveau ContinuousAudioDataStream (données); // Lecture audio. AudioPlayer.player.play (cas); // De même, pour arrêter l'audio. AudioPlayer.player.stop (cas);

Et voila. N'oubliez pas que cette technique utilise des fonctionnalités non documentées; il n'y a aucune garantie qu'il fonctionnera avec autre chose que le Sun JDK actuel.

Chong Ser Wah est consultant au Competency Center for Java à Singapour. Découvrez la compétition Java Cup du centre.

Cette histoire, "Java Tip 24: Comment lire de l'audio dans les applications" a été publiée à l'origine par JavaWorld.