【问题标题】:JAAD stopping other providers from workingJAAD 阻止其他提供商工作
【发布时间】:2012-05-19 14:26:47
【问题描述】:

我正在使用带有 SPI 的 JAAD 通过 JavaSound 播放 m4a 文件,我运行良好。

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

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

【问题讨论】:

  • “所有其他 SPI 库” 您是否暗示 JAAD(从未听说过)为 AAC 提供 SPI?如果是这样,请找到该 Jar 并将其添加到您(其他)项目的运行时类路径中。
  • @AndrewThompson 很抱歉造成混淆 - 是的,JAAD 为 AAC 提供了 SPI。问题不在于让它与其他项目一起工作,问题在于让它与其他 SPI 一起工作,例如 mp3SPI、JFlac 等等——它基本上“占用”了所有格式,试图全部播放它们,如果它不能(而不仅仅是尝试播放 AAC 音频。)我可以通过检查文件扩展名来解决它(ish),或者可以尝试修补 JAAD - 我只是想知道其他人是否有更好的想法。

标签: java audio javasound aac


【解决方案1】:

【讨论】:

  • 谢谢 - 我应该在这里发布它作为答案但忘记了!我是迈克尔·贝瑞 ;)
  • Google 代码的链接已失效。
  • @Berry120 你有使用 JAAD 玩 m4a 的样本吗?我不知道该怎么做:(
  • 我的转换不受支持,我错过了什么吗?不支持的转换:PCM_SIGNED 0.0 Hz, 16 bit, 0 channels, 0 bytes/frame, little-endian from PCM_SIGNED 0.0 Hz, 0 bit, 0 channels, 0 bytes/frame,
【解决方案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()。

【讨论】:

  • 嗨,amb,我已经研究 JAAD 1 个半月了。我试图放弃,但我想最后一次尝试 JAAD 1。但是,我尽我所能,在处理 .m4a 文件时仍然出现错误。JAAD 是否也加载 JLayer、MP3SPI 和 Tritonous??
  • 嘿 taymede,我已经有一段时间没有做这个了,但我认为加载的顺序应该是:JLayer、MP3SPI、Tritonous Share,最后一个应该是 JAAD。这是安排在项目的类路径中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2010-12-08
相关资源
最近更新 更多