在java應用程式中加入聲音
阿新 • • 發佈:2019-01-29
先說一下在 applet 中播放聲音檔案的一般步驟:
建立一個 AudioClip 物件
裝入 .au 或者wav的聲音檔案(或者後面所說的支援的型別)到 AudioClip 物件
下面是相應的程式碼:
import java.applet.*;
AudioClip ac = getAudioClip(getCodeBase(), soundFile);
ac.play(); //一次播放
ac.stop(); //停止播放
ac.loop(); //迴圈播放聲音
看起來,在 Java 應用程式中用相同的程式碼來播放聲音檔案似乎也是可行的。但很不幸,如果你真這樣做,編譯器就會報錯。為什麼呢?因為 AudioClip 物件及其方法 getAudioClip() 屬於java.applet 包 -- 而不屬於應用程式包的。 可喜的是我們還可以自己做些改變來實現聲音播放功能。
解決這個問題的竅門是利用由 Sun 及 其JDK 提供的某些 undocumented 的特徵。先看看 Sun JDK 中的檔案 classes.zip (使用任何解壓工具即可),發現其中不僅包含標準的 Java 包如 java.applet 而且還存在包 sun.audio. (在 sun/audio 的目錄下.)(你不需要對其操作)
包 sun.audio 中包含了用於播放聲音檔案所需的所有東西!下面是示例程式碼:
import sun.audio.*; //引入包,一定要的
import java.io.*;
將上面兩條語句放你程式前面(相信你學java這點還是知道吧! )
// 用輸入流開啟一音訊檔案
InputStream in = new FileInputStream(Filename);//FIlename 是你載入的聲音檔案如(“game.mav”)
// Create an AudioStream object from the input stream.
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);//用靜態成員player.start播放音樂
AudioPlayer.player.stop(as);// 同樣這是關閉音樂
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果需要持續播放聲音檔案,則要稍稍複雜一點:
InputStream in = new FileInputStream(Filename);//FIlename 是你載入的聲音檔案如(“game.mav”) //獲得音訊檔案
AudioStream as = new AudioStream(in);
AudioData data = as.getData();
// Create ContinuousAudioDataStream.
ContinuousAudioDataStream gg = new ContinuousAudioDataStream (data);
AudioPlayer.player.start (gg); // 播放
AudioPlayer.player.stop (gg); // 停止
如果要用一個 URL 做為聲音流的源(source),則用下面的程式碼所示替換輸入流來建立聲音流:
AudioStream as = new AudioStream (url.openStream());
////////////////======================================================
現在我給一個應用程式的例子給大家:
import sun.audio.*; //import the sun.audio package
import java.io.*;
public class MYsound{
public MYsound(){
try{
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
//AudioPlayer.player.stop(as);
}catch(FileNotFoundException e){
}
catch(IOException e){
}
}
public static void main(String arg[]){
new MYsound();
}
}
、、、、、、、、、、、、、、、、、、、、、、、
注意::聲音檔案一定與你的源程式放在一個目錄,其他目錄的自己處理
聲音檔案支援型別,au,wav,RMF,MIDI型別0檔案,MIDI型別1檔案,AIFF,(其他的自己去找)
、、、、、、、、、、、、、、、、、、、、、、、
拿過去用就ok了,還有就是一定要做異常處理
宣告:
/*try{//播放聲音只放一次
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
}catch(FileNotFoundException e){
System.out.print("FileNotFoundException ");
}
catch(IOException e){ System.out.print("有錯誤!");}*/
try{//迴圈播放聲音
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioData data = as.getData();
ContinuousAudioDataStream gg= new ContinuousAudioDataStream (data);
AudioPlayer.player.start(gg);// Play audio.
}catch(FileNotFoundException e){
System.out.print("FileNotFoundException ");
}
catch(IOException e){
System.out.print("有錯誤!");}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
建立一個 AudioClip 物件
裝入 .au 或者wav的聲音檔案(或者後面所說的支援的型別)到 AudioClip 物件
下面是相應的程式碼:
import java.applet.*;
AudioClip ac = getAudioClip(getCodeBase(), soundFile);
ac.play(); //一次播放
ac.stop(); //停止播放
ac.loop(); //迴圈播放聲音
看起來,在 Java 應用程式中用相同的程式碼來播放聲音檔案似乎也是可行的。但很不幸,如果你真這樣做,編譯器就會報錯。為什麼呢?因為 AudioClip 物件及其方法 getAudioClip() 屬於java.applet 包 -- 而不屬於應用程式包的。
解決這個問題的竅門是利用由 Sun 及 其JDK 提供的某些 undocumented 的特徵。先看看 Sun JDK 中的檔案 classes.zip (使用任何解壓工具即可),發現其中不僅包含標準的 Java 包如 java.applet 而且還存在包 sun.audio. (在 sun/audio 的目錄下.)(你不需要對其操作)
包 sun.audio 中包含了用於播放聲音檔案所需的所有東西!下面是示例程式碼:
import sun.audio.*; //引入包,一定要的
import java.io.*;
將上面兩條語句放你程式前面(相信你學java這點還是知道吧!
// 用輸入流開啟一音訊檔案
InputStream in = new FileInputStream(Filename);//FIlename 是你載入的聲音檔案如(“game.mav”)
// Create an AudioStream object from the input stream.
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);//用靜態成員player.start播放音樂
AudioPlayer.player.stop(as);//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果需要持續播放聲音檔案,則要稍稍複雜一點:
InputStream in = new FileInputStream(Filename);//FIlename 是你載入的聲音檔案如(“game.mav”) //獲得音訊檔案
AudioStream as = new AudioStream(in);
AudioData data = as.getData();
// Create ContinuousAudioDataStream.
ContinuousAudioDataStream gg = new ContinuousAudioDataStream (data);
AudioPlayer.player.start (gg); // 播放
AudioPlayer.player.stop (gg); // 停止
如果要用一個 URL 做為聲音流的源(source),則用下面的程式碼所示替換輸入流來建立聲音流:
AudioStream as = new AudioStream (url.openStream());
////////////////======================================================
現在我給一個應用程式的例子給大家:
import sun.audio.*; //import the sun.audio package
import java.io.*;
public class MYsound{
public MYsound(){
try{
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
//AudioPlayer.player.stop(as);
}catch(FileNotFoundException e){
}
catch(IOException e){
}
}
public static void main(String arg[]){
new MYsound();
}
}
、、、、、、、、、、、、、、、、、、、、、、、
注意::聲音檔案一定與你的源程式放在一個目錄,其他目錄的自己處理
聲音檔案支援型別,au,wav,RMF,MIDI型別0檔案,MIDI型別1檔案,AIFF,(其他的自己去找)
、、、、、、、、、、、、、、、、、、、、、、、
拿過去用就ok了,還有就是一定要做異常處理
宣告:
/*try{//播放聲音只放一次
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioPlayer.player.start(as);
}catch(FileNotFoundException e){
System.out.print("FileNotFoundException ");
}
catch(IOException e){ System.out.print("有錯誤!");}*/
try{//迴圈播放聲音
InputStream in = new FileInputStream("hello.wav");
AudioStream as = new AudioStream(in);
AudioData data = as.getData();
ContinuousAudioDataStream gg= new ContinuousAudioDataStream (data);
AudioPlayer.player.start(gg);// Play audio.
}catch(FileNotFoundException e){
System.out.print("FileNotFoundException ");
}
catch(IOException e){
System.out.print("有錯誤!");}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////