Java savjet 24: Kako reproducirati zvuk u programima

Reprodukcija audio datoteka u Java programima službeno nije podržana u trenutnom izdanju Java. Ali ne bojte se, postoji način! Ovaj će vam savjet pokazati kako - počevši od opisa osnovnih koraka uključenih u reprodukciju audio isječaka u Java apletima, a zatim prelazeći na podršku za Java programe.

Reprodukcija audio isječaka u apletima vrlo je jednostavna i uključuje sljedeće korake:

  • Stvorite objekt AudioClip
  • Učitajte .au zvučnu datoteku u AudioClip
  • Reproducirajte zvukove jednom ili neprekidno petlju
  • Zaustavite reprodukciju

Evo kako izgleda kôd za ove korake:

import java.applet. *; AudioClip ac = getAudioClip (getCodeBase (), soundFile); ac.play (); // reproduciraj jednom ac.stop (); // prestati igrati ac.loop (); // igrati kontinuirano

Čini se logičnim koristiti isti taj kôd za reprodukciju audio isječaka u Java programu. Nažalost, ako to učinite, dobit ćete pogreške od prevoditelja. Zašto? Budući da su AudioClipobjekt i getAudioClip()metoda dio paketa java.applet - i nisu dio aplikacija. Dobra vijest je da sami možemo zaroniti i učiniti da stvari funkcioniraju.

Trik u rješavanju ovog problema je korištenje nekih nedokumentiranih značajki koje pruža Sun u svom JDK. Uzimajući zaviriti unutar classes.zip datoteke iz Sun JDK (korištenjem bilo koje od raznih sažeta komunalije), nalazimo ne samo standardni Java paketi kao što su java.applet ali i sun.audio . (Oni se nalaze u direktoriju sun / audio.)

Paket sun.audio sadrži sve što nam je potrebno za reprodukciju audio isječaka! Evo koda:

uvoz sun.audio. *; // uvoz sun.audio paketa import java.io. *; // ** dodajte ovo u svoj kod aplikacije prema potrebi // Otvorite ulazni tok u audio datoteku. InputStream u = novi FileInputStream (naziv datoteke); // Stvorimo AudioStream objekt iz ulaznog toka. AudioStream as = novi AudioStream (u); // Za reprodukciju // isječka koristite statički član klase "player" iz klase AudioPlayer. AudioPlayer.player.start (kao); // Slično tome, za zaustavljanje zvuka. AudioPlayer.player.stop (kao);

Da biste koristili URL kao izvor audio prijenosa, zamijenite sljedeće za ulazni tok i postavljanje audio prijenosa:

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

Neprekidno reproduciranje audio toka dodaje malo veću složenost:

// Stvaranje audio prijenosa kao što je prethodno spomenuto. // Stvaranje izvora AudioData. Podaci AudioData = as.getData (); // Stvaranje ContinuousAudioDataStream. ContinuousAudioDataStream cas = novi ContinuousAudioDataStream (podaci); // Reproduciraj audio. AudioPlayer.player.play (cas); // Slično tome, za zaustavljanje zvuka. AudioPlayer.player.stop (cas);

Eto ti ga. Zapamtite, ova tehnika koristi nedokumentirane značajke; ne postoje garancije da će raditi s bilo čime osim sa trenutnim Sun JDK.

Chong Ser Wah savjetnik je u Centru za kompetencije za Javu u Singapuru. Pogledajte natjecanje Java kupa u centru.

Ovu je priču "Java savjet 24: Kako reproducirati zvuk u aplikacijama" izvorno objavio JavaWorld.