2010-05-16 55 views
1

我正處於Java編寫小型音樂/節奏遊戲的初期階段(通過Slick框架,後者使用OpenAL,但這可能與此無關)。遊戲需要以WAV格式讀取(和回放)幾個聲音文件,但其中一些文件正在拋出[javax.sound.sampled.UnsupportedAudioFileException]異常。針對UnsupportedAudioFileException的解決方法?

at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102) 
at org.newdawn.slick.openal.WaveData.create(WaveData.java:123) 
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713) 
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683) 
at org.newdawn.slick.Sound.<init>(Sound.java:33) 

這些文件可以在Winamp或Foobar2000的回放就好了,所以這意味着Java的只是不承認文件格式的一些變種。我現在有什麼選擇?

注:有問題的文件是用戶提供的,所以我不能只是將它們轉換事前(使用類似的勇氣)。任何轉換步驟都必須在運行時完成。需要

回答

5

一個被認可的東西約WAV文件,就在於它是一種容器格式 - 它可以容納多種不同格式的數據,包括​​到MP3

在這種情況下,我會猜測,正在使用該庫被鉤住Java Sound API和API的實現不支持包含在WAV文件中的數據的格式,導致UnsupportedAudioFileException例外。

的文件可以播放在Winamp或Foobar2000的回來就好 ,所以這意味着 的Java就是不承認文件格式的一些變種 。

爲什麼Winamp的和其他程序可以播放WAV文件的原因是因爲它可能是使用Windows Audio Compression Manager或者(如果我理解正確的話)DirectShow,這是用來管理的audio codecs不同的類型。

Winamp的本身並不需要知道如何將WAV文件中的音頻數據進行解碼;它要求ACM或DirectShow返回它可以處理的原始音頻數據。 (或者也可能是將數據直接發送到音頻輸出端。)

這個時候我的選擇是什麼?

一種替代似乎存在的形式Java Media Framework,似乎有support many multimedia formats

它說它在使用「JMF 2.1.1 Windows Performance Pack」時會掛接到Windows ACM中,因此它可能能夠播放無法由Java Sound API播放的WAV文件。

+1

謝謝你的回答。似乎沒有其他人加入到這個,所以我接受這一個:)。雖然有一點更新:Java Media Framework顯然已經過時/被遺棄,並且多年未更新,所以它可能不是一個好主意。發現了值得進一步研究的兩種選擇:FMJ(http://fmj-sf.net/)和Xuggler(http://www.xuggle.com/xuggler/)。 – tschan 2010-06-02 07:03:46

相關問題