我正在使用带有SPI的JAAD通过JavaSound播放m4a文件,我已经正常工作。但是,我希望以这种方式支持多种格式 - 但每当我尝试播放另一种格式时,JAAD似乎都试图处理它,然后失败(显然是因为它只处理AAC)。JAAD阻止其他提供者工作
我假设这是JAAD中的一个错误,因为所有其他SPI库都可以相互良好地发挥作用。有没有一种很好的方法来解决它,直到它被修复,或者有另一个AAC库与我可以使用的Javasound一起工作?
我正在使用带有SPI的JAAD通过JavaSound播放m4a文件,我已经正常工作。但是,我希望以这种方式支持多种格式 - 但每当我尝试播放另一种格式时,JAAD似乎都试图处理它,然后失败(显然是因为它只处理AAC)。JAAD阻止其他提供者工作
我假设这是JAAD中的一个错误,因为所有其他SPI库都可以相互良好地发挥作用。有没有一种很好的方法来解决它,直到它被修复,或者有另一个AAC库与我可以使用的Javasound一起工作?
有使用JAAD由迈克尔·贝里创造了一个解决方法:这是URL
因为我花了一段时间才能找到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()。
*“所有其他SPI库”*您是否暗示JAAD(从未听说过)为AAC提供SPI?如果是这样,找到该jar并将其添加到(其他)项目的运行时类路径。 –
@AndrewThompson很抱歉,JAAD为AAC提供了SPI。问题在于它不能与其他项目一起工作,问题在于它与其他SPI(例如mp3SPI,JFlac等)协同工作 - 它实质上“占据”所有格式,尝试播放它们,并且只是失败它不能(而不只是试图播放AAC音频)。我可以通过检查文件扩展名来解决它(ISH),或者尝试修补JAAD - 我只是想知道是否有其他人有更好的想法。 – berry120