2012-05-19 48 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