【问题标题】:Decoding ogg and other compressed audio file formats with Android SDK (OpenSL)使用 Android SDK (OpenSL) 解码 ogg 和其他压缩音频文件格式
【发布时间】:2014-10-25 23:25:44
【问题描述】:

OpenSL 的文档,其中指出 “支持的格式包括 WAV PCM、WAV alaw、WAV ulaw、MP3、Ogg Vorbis、AAC LC、HE-AACv1 (aacPlus)、HE-AACv2 (enhanced aacPlus)、AMR 和 FLAC [前提是整个平台都支持这些格式,和 AAC 格式必须位于 MP4 或 ADTS 容器中]。不支持 MIDI。WMA 不是开源版本的一部分,并且尚未验证与 Android OpenSL ES 的兼容性。"

在其他地方,在论坛中,我读到 Android 上的 OpenSL 不支持任何压缩格式的解​​码。由于使用 OpenSL API 实现解码器似乎是一项至少需要几个小时才能实现的任务,所以我很想知道我是否可以确定一旦我已经为解码准备了所有必需的样板代码我不会因为无法读取任何压缩格式(尤其是 OGG)而感到惊讶。

【问题讨论】:

    标签: android android-ndk ogg opensl


    【解决方案1】:

    使用 OpenSL 解码 ogg vorbis 有效。它甚至可以进行采样率转换,这很方便。虽然我发现事件SL_PLAYEVENT_HEADATEND 没有发出流结束的信号。在mp3wav '解码' 的情况下,将调度此事件。这不是必要的破坏者,b/c 您可以通过其他方式确定解码已完成。

    我最终将 ogg vorbis 源添加到我的项目中,因为我希望对解码有更多控制权:例如,这样我可以提前知道解码剪辑的长度,但我必须进行采样率转换我自己。

    【讨论】:

    • 好的,你有钱可以分享吗? B/c 看起来你没有技术困难,但想在不花时间的情况下外包这项任务......(而且我不想粗鲁,我只是在问......)
    • 我希望它是公共项目的一部分。我需要说,对于这些耗时、烦人的任务,这些任务并不是真正的原创编程思想,但最终可以被视为所有样板代码,我总是愿意分享。例如创建一个 Gist。
    • 如果要使用 OpnenSL,请查看 android-ndk 中的 native-audio 示例项目。 (播放的音频是 wav 文件还是 ogg 都无所谓。)而且您必须将播放器的接收器更改为缓冲区队列,类似于同一项目中的记录器示例。如果您想在项目中包含 ogg/vorbis 源代码,请查看 libgdx 的功能。 (或者只使用 libgdx)
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2011-07-22
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多