實現原理
我用接口java.applet.AudioClip實現音樂播放,那么我們需要了解這個接口的情況。
我們主要使用其中的三個方法:
(1)void loop(); //循環播放
(2)void play(); //開始播放(單次)
(3)void stop(); //停止播放
雖然AudioClip 是一個接口,不能直接創建實例,但是java.applet.Applet 對象提供了一個靜態的方法newAudioClip(),因此可以直接利用如下的語句,得到一個AudioClip 的實例引用:
AudioClip auu= java.applet.Applet.newAudioClip(new java.net.URL(this.jTextField1.getText()));
newAudioClip()方法的參數是聲音文件的URL,具體如下:
static void newAudioClip(URL url);
那么現在我們需要了解URL是什么東西,URL是統一資源定位符,對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標准資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它(來自百度百科)。
目前的情況我們只需要知道URL可以保留音樂文件,那么我們用File保存音樂文件的內容,通過 FIle ---> URI ----> URL得到音樂文件URL,隨后作為AudioClip的參數加入就可以了。
最后對於音樂的播放等等,我們就可以使用上面的三種方法實現音樂播放和關閉。
代碼區(和游戲內部有一定區別,但效果一致)
package component; import java.applet.AudioClip; import java.io.*; import java.applet.Applet; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; public class Music extends Thread { private File file; private URI uri; private URL url; private AudioClip aau; //由於游戲內部需要多種音樂,故根據參數的不同,方法不同的音樂 Music(int mode) { if (mode == 1) { file = new File("img/fire.wav"); } else if (mode == 2) { file = new File("img/head.wav"); } else if (mode == 3) { file = new File("img/mid.wav"); } else if (mode == 4) { file = new File("img/first.wav"); } else if (mode == 5) { file = new File("img/second.wav"); } else if (mode == 6) { file = new File("img/fifth.wav"); } else if (mode == 7) { file = new File("img/lost.wav"); } else if (mode == 8) { file = new File("img/win.wav"); } else if (mode == 9) { file = new File("img/end.wav"); } else if (mode == 10) { file = new File("img/ranking.wav"); } else if (mode == 11) { file = new File("img/set.wav"); } uri = file.toURI();//轉化為URI try { url = uri.toURL();//轉化為URL aau = Applet.newAudioClip(url); } catch (MalformedURLException e) { e.printStackTrace(); } // 解析地址 } public void run() { try { aau.loop(); // 循環播放 } catch (Exception e) { e.printStackTrace(); } } //外部控制音樂關閉 public void close() { aau.stop(); } //外部控制音樂開啟 public void open() { aau.loop(); } public static void main(String[] args) { new Music(11).start();//由於使用多線程進行播放,所以需要先開啟音樂播放線程 //由於對音樂的開關的控制在游戲的其他地方,所以這個地方如果不手動結束程序,音樂不會停止 } }