聲音是一個遊戲至關重要的部分。
上一次我談了利用AudioClip 簡單兩行代碼來播放聲音(http://blog.csdn.net/cnmm22/article/details/44674173)。今天我介紹一下另一種方法,利用AudioStream。
使用這兩個方法過程中定位一個資源的過程要難於使用方法本身。
上一次我們給 AudioClip 傳進一個 URL 從而定位一個資源,這一次,我們延續這個思路,完善一下怎樣在java中定位一個資源文件。
這一次。我換一種寫法:
String path = new File(getClass().getClassLoader().getResource(“”).toURI()).getPath();
FileInputStream fileau = new FileInputStream(path + “\sounds\1\1.mp3”);
這次我們沒有傳 URL,但首先同樣利用反射機制,getClass().getClassLoader().getResource.toURI()).getPath(),拿到項目 bin 文件夾在電腦裏的絕對位置,因爲是反射,所以在文件被移動後仍然能找到資源。 之後的 path + “\sounds\1\1.mp3” 是文件本身的urI,其中sounds/1 文件夾爲示範,代表在bin 下滴任意路徑。注意其中反斜槓由雙反斜槓代替。
我們把這個path (String name),傳給 FileInputStream,從而得到我們要播放 AudioStream 的資源文件。
接下來是播放代碼:
AudioStream as = new AudioStream(fileau);
AudioPlayer.player.start(as);
假設我們這次還是用 URL來定位一個資源文件,參考代碼爲:
URL u = XXX.class.getClassLoader().getResource(“sounds/1/diao.wma”);
as = new AudioStream(u.openStream());
AudioPlayer.player.start(as);
如果我們需要重複播放一首音樂,需要這樣寫:
AudioData data = as.getData();
ContinuousAudioDataStream gg = new ContinuousAudioDataStream(data);
AudioPlayer.player.start(gg);
最後別忘:as.close();當然還有 try catch .
最後我需要說明。 java 我這次提到的兩中聲音播放的方法,對所有音頻文件的支持並不是很理想,有很多格式,比如 mp3是無法播放滴,文件一般情況下都需要轉換成 wav,在這之後因爲轉碼的問題,甚至不一定所有的 wav 都能播放,這樣會使文件過大,而且目前在jdk1.8 我還沒找到很好的暫停,繼續播放音樂的方法。所以我希望本文能夠多給與 java裏通過反射定位一個資源文件滴一些參考。