Android 自定义音频播放器,用 libPd 或 OpenSL ES 或 AudioTrack 替换 MediaPlayer

Posted

技术标签:

【中文标题】Android 自定义音频播放器,用 libPd 或 OpenSL ES 或 AudioTrack 替换 MediaPlayer【英文标题】:Android custom audio player to replace MediaPlayer with libPd or OpenSL ES or AudioTrack 【发布时间】:2014-01-28 10:51:46 【问题描述】:

我已经使用 MediaPlayer API 开发了 Streaming Audio 应用程序。所有功能都可以正常工作,预计开始播放需要更多时间(缓冲时间更多)。

我想添加录制实时音频流(将实时流数据保存在磁盘中,而不是来自 MIC 的录制)。由于 MediaPlayer 不提供任何 API 来访问原始数据流,我计划构建自定义音频播放器。

我想控制缓冲时间,访问原始音频流,应该能够播放android原生支持的所有音频格式。哪个 api(libPd 或 OpenSL ES 或 AudioTrack)适合在 Android 中构建自定义音频播放器?

【问题讨论】:

AudioTrack 只播放原始 PCM,所以除非你想包含一个单独的解码器,否则它会被淘汰。 【参考方案1】:

根据我的经验,OpenSL_ES 将是选择,这里有一个Link,它解释了如何进行音频流传输,您可能会发现它很有用。 bufferframes 决定了您在播放前将收集多少样本,因此较小的 bufferframes 可以加快响应时间,但您必须在这与您的设备处理能力之间取得平衡。

【讨论】:

【参考方案2】:

您也可以使用 libpd (pd-for-android) 进行录制。 所有的录制过程都由 libpd 管理。 检查 ScenePlayer 项目,它使用 libpd 并允许您将音频录制到 sdcard 上的文件夹中:

https://github.com/libpd/pd-for-android/tree/master/ScenePlayer

【讨论】:

以上是关于Android 自定义音频播放器,用 libPd 或 OpenSL ES 或 AudioTrack 替换 MediaPlayer的主要内容,如果未能解决你的问题,请参考以下文章

从 javascript/html 播放音频时设置自定义元数据(控制中心 iOS)

Android MediaPlayer 播放音频

在 Android 自定义 ROM 中修改通话中的语音播放

如何制作自定义音频格式和自定义播放器

iPhone中的自定义音频播放器

使用音频流播放自定义音频格式