1. 程式人生 > >在java應用程式中加入聲音

在java應用程式中加入聲音

    先說一下在 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("有錯誤!");}        
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////