Programmering

Java Tip 24: Sådan afspilles lyd i applikationer

Afspilning af lydfiler i Java-applikationer understøttes ikke officielt i den nuværende udgivelse af Java. Men frygt ikke, der er en måde! Dette tip viser dig hvordan - startende med en beskrivelse af de grundlæggende trin, der er involveret i afspilning af lydklip i Java-applets og derefter videre til understøttelse af Java-applikationer.

Afspilning af lydklip i applets er ret simpelt og involverer følgende trin:

  • Opret et AudioClip-objekt
  • Indlæs .au-lydfil i AudioClip
  • Afspil lyde én gang eller løb kontinuerligt
  • Stop afspilning

Sådan ser koden til disse trin ud:

importer java.applet. *; AudioClip ac = getAudioClip (getCodeBase (), soundFile); ac.play (); // spil en gang ac.stop (); // stop med at spille ac.loop (); // spil kontinuerligt 

Det synes logisk at bruge den samme kode til at afspille lydklip i en Java-applikation. Desværre, hvis du gør det, får du fejl fra compileren. Hvorfor? Fordi AudioClip objekt og getAudioClip () metoden er en del af java.applet pakke - og er ikke en del af applikationer. Den gode nyhed er, at vi kan dykke ned og få tingene til at fungere selv.

Tricket til at løse dette problem er at bruge nogle udokumenteret funktioner, der leveres af Sun i dets JDK. Tager et kig ind i classes.zip fil fra Sun JDK (ved hjælp af et hvilket som helst af de forskellige zipfile-værktøjer), finder vi ikke kun standard Java-pakker som f.eks. java.applet men også sun.audio. (Disse findes i biblioteket sol / lyd.)

Det sun.audio pakken indeholder alt hvad vi har brug for for at kunne afspille lydklip! Her er koden:

importere sun.audio. *; // import af sun.audio-pakkeimport java.io. *; // ** tilføj dette til din applikationskode efter behov // Åbn en inputstrøm til lydfilen. InputStream in = ny FileInputStream (filnavn); // Opret et AudioStream-objekt fra inputstrømmen. AudioStream som = ny AudioStream (in); // Brug det statiske klassemedlem "afspiller" fra klasse AudioPlayer til at afspille // klip. AudioPlayer.player.start (som); // Tilsvarende for at stoppe lyden. AudioPlayer.player.stop (som); 

Hvis du vil bruge en URL som lydstrømskilde, skal du erstatte følgende for opsætning af inputstrøm og lydstrøm:

AudioStream som = ny AudioStream (url.openStream ()); 

At afspille lydstrømmen kontinuerligt tilføjer lidt mere kompleksitet:

// Opret lydstrøm som tidligere diskuteret. // Opret AudioData-kilde. AudioData data = as.getData (); // Opret ContinuousAudioDataStream. ContinuousAudioDataStream cas = ny ContinuousAudioDataStream (data); // Afspil lyd. AudioPlayer.player.play (cas); // Tilsvarende for at stoppe lyden. AudioPlayer.player.stop (cas); 

Og der har du det. Husk, denne teknik bruger udokumenterede funktioner; der er ingen garantier for, at det fungerer med andet end den nuværende Sun JDK.

Chong Ser Wah er konsulent ved Competency Center for Java i Singapore. Tjek centrets Java Cup-konkurrence.

Denne historie, "Java Tip 24: Sådan afspilles lyd i applikationer" blev oprindeligt udgivet af JavaWorld.