2012-05-19 46 views
3

我正在使用帶有SPI的JAAD通過JavaSound播放m4a文件,我已經正常工作。但是,我希望以這種方式支持多種格式 - 但每當我嘗試播放另一種格式時,JAAD似乎都試圖處理它,然後失敗(顯然是因爲它只處理AAC)。JAAD阻止其他提供者工作

我假設這是JAAD中的一個錯誤,因爲所有其他SPI庫都可以相互良好地發揮作用。有沒有一種很好的方法來解決它,直到它被修復,或者有另一個AAC庫與我可以使用的Javasound一起工作?

+0

*「所有其他SPI庫」*您是否暗示JAAD(從未聽說過)爲AAC提供SPI?如果是這樣,找到該jar並將其添加到(其他)項目的運行時類路徑。 –

+0

@AndrewThompson很抱歉,JAAD爲AAC提供了SPI。問題在於它不能與其他項目一起工作,問題在於它與其他SPI(例如mp3SPI,JFlac等)協同工作 - 它實質上「佔據」所有格式,嘗試播放它們,並且只是失敗它不能(而不只是試圖播放AAC音頻)。我可以通過檢查文件擴展名來解決它(ISH),或者嘗試修補JAAD - 我只是想知道是否有其他人有更好的想法。 – berry120

回答

3
+0

謝謝 - 我應該在這裏發佈這個答案,但忘記了!我是邁克爾貝里;) – berry120

+0

谷歌代碼的鏈接已經死亡。 – metasim

+0

@ Berry120你有沒有樣品可以使用JAAD玩m4a?我不知道該怎麼做:( – taymedee

2

因爲我花了一段時間才能找到berry150的代碼,這裏是解決方案: 首先,你必須爲了使JLayer,MP3SPI和Tritonous Share在JAAD之前加載,請在類路徑中排列這些jar。然後對得到的AudioInputStream,使用下面的代碼:

if (getAudioFormat().equals(".mp3")) { 
    audioStream = AudioSystem.getAudioInputStream(file); // Obtains an audio input stream of the song 
      } 
else if (getAudioFormat().equals(".m4a")){ 
    audioStream = new AACAudioFileReader().getAudioInputStream(file); 
      } 

那麼,什麼情況是,如果音頻MP3,從Javasound的getAudioStreamMethod()將首先因爲它的瓶子是第一次加載調用。如果音頻是.m4a,則會創建ACCAudioFileReader()的新實例,並調用JAAD庫的getAudioInputStream()。

+0

hi amb,我一直在研究JAAD一個半月..我試圖放棄,但我想給JAAD 1最後一次嘗試,但是,我盡我所能,當我繼續.m4a文件時仍然出現錯誤。JAAD是否加載JLayer,MP3SPI和Tritonous? – taymedee

+0

嘿taymede,自從我工作了一段時間但是我認爲加載的順序應該是:JLayer,MP3SPI,Tritonous Share,然後最後一個應該是JAAD,它被安排在你項目的類路徑中 – amb110395