On peut souhaiter que certaines applications produisent des sons. Il faut alors construire, pour le son qu'on souhaite jouer, une instance de la classe java.applet.AudioClip ; un tel objet possède la méthode play qui joue le son correspondant. Pour construire l'instance de AudioClip, on peut utiliser la méthode statique newAudioClip de la classe java.applet.Applet qui reçoit en argument une instance de la classe URL correspondant au fichier du son.
Nous proposons ci-dessous une petite application où une interface graphique se présente comme ci-contre. Quand on appuie sur le bouton jouer, un son se fait entendre.
Deux techniques sont proposées pour obtenir l'instance de type URL correspondant au fichier du son.
La première technique utilise la méthode getResource de la class Class ; notons rep le répertoire du bytecode de la classe invoquée (dans notre exemple, la classe JouerSon) ou, si la classe appartient à un paquetage, le répertoire qui contient le répertoire racine du paquetage ; le fichier du son doit être dans rep ou dans un sous répertoire de rep ; on donne à la méthode getResource le chemin relatif du fichier du son par rapport à rep ; la méthode renvoie un objet de type URL correspondant au fichier de son.
La seconde technique construit directement l'URL correspondant au fichier de son. On utilise pour cela un constructeur de la classe URL recevant en argument un chemin d'accès au fichier (soit par « file », soit par « http », comme on le voit à partir de l'exemple). Si on utilise la localisation par « file » et un chemin relatif, ce chemin relatif doit être indiqué par rapport au répertoire où on exécute l'application.
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.event.ActionListener; @SuppressWarnings("serial") class IHMSon extends JPanel implements ActionListener { private JButton jouer = new JButton("jouer"); private java.applet.AudioClip son; IHMSon() { // Premiere possibilite java.net.URL url = JouerSon.class.getResource("sons/oiseau.au"); /* Seconde possibilite java.net.URL url = null; try { url = new java.net.URL("http://www.infres.enst.fr/~hudry/coursjava/images/sons/oiseau.au"); } catch (java.net.MalformedURLException exc) { exc.printStackTrace(); } */ son = java.applet.Applet.newAudioClip(url); add(jouer); jouer.addActionListener(this); } public void actionPerformed(java.awt.event.ActionEvent e) { son.play(); } } class JouerSon { public static void main(String[] argv) { JFrame fenetre = new JFrame(); fenetre.setContentPane(new IHMSon()); fenetre.pack(); fenetre.setLocation(100, 100); fenetre.setVisible(true); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
© Irène Charon, Télecom ParisTech, 2011