【问题标题】:Decoding Encoded Audio Data (MP3s, etc) on Android Without Playing It在不播放的情况下在 Android 上解码编码的音频数据(MP3 等)
【发布时间】:2011-01-21 04:00:24
【问题描述】:

短版:将数据编码为 MP3(最好是 AAC/Ogg/WMA) 到一个 Java 数组或 ByteBuffer 中,然后我可以 操纵?

我正在整理一个程序,该程序有减速和加速 声音文件作为其功能之一。这适用于 WAV 文件, 这是一个标头加上需要发送到的确切二进制数据 扬声器,现在我需要为 MP3 实现它(理想情况下,这个 也会支持 AAC、Ogg 和 WMA,但因为这些不太受欢迎 格式,这不是必需的)。 Android 不公开接口 解码 MP3 而不播放它,所以我需要创建它 界面。

虽然我对其他人持开放态度,但会出现三个选项:

1) 编写我自己的解码器。我已经有一个功能帧检测器 我希望用于选项(3),现在只需要 实现霍夫曼解码表。

2) 使用 JLayer 或等效的 Java 库来处理 解码。我不完全清楚许可证的后果 在这里。

3) 连接到 libmedia 库/MediaPlayerService。这是什么 SoundPool 确实如此,而且该服务的使用量让我相信 虽然它正式不稳定,但实施并不顺利 任何地方。这意味着编写 JNI 代码来连接服务,但是 我发现那是一个很深的兔子洞。表面上,我是 sp 模板有问题。

【问题讨论】:

  • 你成功解码音频数据了吗?如果是这样,你是怎么做到的?

标签: android audio mp3 decoding


【解决方案1】:

我使用 libmad 和 NDK 做到了这一点。 JLayer 是一种缓慢的方式,而媒体框架是一个移动的目标。你可以在http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231找到信息和源代码

【讨论】:

  • 这似乎是一个有限的解决方案,因为 libmad 是在 GPL 下获得许可的;这意味着要使用它,我需要根据 GPL 许可我的应用程序,这不是我打算做的事情(听起来你可能在同一条船上)。这是使 JLayer 吸引人的部分原因:它是 LGPL 许可的。 Android 是 Apache 许可的,所以你真的很清楚。我的很大一部分人怀疑媒体框架是一个移动的目标:在这一点上,它已经根深蒂固于许多更高级别的对象(主要是 MediaPlayer 和 SoundPool)中,我怀疑它们会被删除。
【解决方案2】:

我没试过,但是mp3transform是LGPL。

【讨论】:

  • android 不支持 javax.sound。这个lib使用它,所以它对android没有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2011-12-28
相关资源
最近更新 更多