3

我正在使用带有 SPI 的 JAAD 通过 JavaSound 播放 m4a 文件,我工作得很好。

但是,我想以这种方式支持多种格式 - 但每当我尝试播放另一种格式时,JAAD 似乎会尝试处理它然后失败(显然因为它只处理 AAC。)

我假设这是 JAAD 中的一个错误,因为所有其他 SPI 库都可以相互配合。有没有一种很好的方法可以解决它,直到它被修复,或者是否有另一个可以与 Javasound 一起使用的 AAC 库,我可以使用它?

4

2 回答 2

3

有一个使用由 Michael Berry 创建的 jaad 的解决方法:这是 url

https://code.google.com/p/quelea-projection/source/browse/Quelea/src/org/quelea/sound/AudioTrack.java?spec=svn0352523f49cf20d41d1a7dc098af1db38000cc6d&r=0352523f49cf20d41d1a7dc098af1db38000cc6d

于 2012-08-04T21:03:49.283 回答
2

因为我花了一段时间才找到 berry150 的代码,所以这里是解决方案:首先,您必须在类路径中订购 jar,以便在 JAAD 之前加载 JLayer、MP3SPI 和 Tritonous Share。然后要获取 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() 将首先被调用,因为它的 JAR 是首先加载的。如果音频是 .m4a,则创建 ACCAudioFileReader() 的新实例并调用 JAAD 库的 getAudioInputStream()。

于 2013-07-24T18:16:53.643 回答