Suggerimento Java 24: come riprodurre l'audio nelle applicazioni

La riproduzione di file audio nelle applicazioni Java non è ufficialmente supportata nell'attuale versione di Java. Ma non temere, c'è un modo! Questo suggerimento ti mostrerà come: iniziando con una descrizione dei passaggi di base coinvolti nella riproduzione di clip audio nelle applet Java e poi passando al supporto dell'applicazione Java.

La riproduzione di clip audio nelle applet è abbastanza semplice e prevede i seguenti passaggi:

  • Crea un oggetto AudioClip
  • Carica il file audio .au in AudioClip
  • Riproduci i suoni una volta o in loop continuamente
  • Interrompi la riproduzione

Ecco come appare il codice per questi passaggi:

import java.applet. *; AudioClip ac = getAudioClip (getCodeBase (), soundFile); ac.play (); // gioca una volta ac.stop (); // smette di giocare ac.loop (); // gioca continuamente

Sembrerebbe logico utilizzare questo stesso codice per riprodurre clip audio in un'applicazione Java. Sfortunatamente, se lo fai, riceverai errori dal compilatore. Perché? Perché l' AudioClipoggetto e il getAudioClip()metodo fanno parte del pacchetto java.applet e non fanno parte delle applicazioni. La buona notizia è che possiamo immergerci e far funzionare le cose da soli.

Il trucco per risolvere questo problema è utilizzare alcune funzionalità non documentate fornite da Sun nel suo JDK. Dando uno sguardo all'interno del file classes.zip da Sun JDK (utilizzando una qualsiasi delle varie utility zipfile), troviamo non solo i pacchetti Java standard come java.applet ma anche sun.audio . (Questi sono nella directory sun / audio.)

Il pacchetto sun.audio contiene tutto ciò di cui abbiamo bisogno per poter riprodurre clip audio! Ecco il codice:

import sun.audio. *; // importa il pacchetto sun.audio import java.io. *; // ** aggiungilo nel codice dell'applicazione come appropriato // Apri un flusso di input nel file audio. InputStream in = new FileInputStream (Filename); // Crea un oggetto AudioStream dal flusso di input. AudioStream as = nuovo AudioStream (in); // Usa il membro della classe statica "player" dalla classe AudioPlayer per riprodurre // clip. AudioPlayer.player.start (as); // Allo stesso modo, per interrompere l'audio. AudioPlayer.player.stop (as);

Per utilizzare un URL come sorgente del flusso audio, sostituire quanto segue per il flusso di input e l'impostazione del flusso audio:

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

La riproduzione continua del flusso audio aggiunge un po 'più di complessità:

// Crea un flusso audio come discusso in precedenza. // Crea sorgente AudioData. Dati AudioData = as.getData (); // Crea ContinuousAudioDataStream. ContinuousAudioDataStream cas = new ContinuousAudioDataStream (dati); // Riproduci audio. AudioPlayer.player.play (cas); // Allo stesso modo, per interrompere l'audio. AudioPlayer.player.stop (cas);

E il gioco è fatto. Ricorda, questa tecnica utilizza funzionalità non documentate; non ci sono garanzie che funzioni con qualsiasi cosa tranne l'attuale Sun JDK.

Chong Ser Wah è consulente presso il Competency Center for Java a Singapore. Dai un'occhiata alla Java Cup Competition del centro.

Questa storia, "Java Tip 24: How to play audio in applications" è stata originariamente pubblicata da JavaWorld.