首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问MediaPlayer中的音频缓冲区

访问MediaPlayer中的音频缓冲区
EN

Stack Overflow用户
提问于 2013-12-17 02:58:55
回答 2查看 2.2K关注 0票数 3

我在Android项目中工作,在这个项目中我必须在频域中分析音频信号。实际上我有准备好的模块,从设备麦克风读取信号,并处理它(快速傅立叶变换,可视化等)我对这种信号没有任何问题。

现在我正在尝试分析音频信号,它以mp3文件的形式存储在设备上。一般来说,我在MediaPlayer对象中播放它不会有任何问题。不幸的是,我在访问我的播放器播放的数据缓冲区时遇到了一些问题,我可以用它来进行频谱计算。

你有什么建议吗?怎样才能访问音频缓冲区?有没有可能使用MediaPlayer,或者我应该使用其他方法来解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2013-12-17 03:10:32

据我所知,没有办法使用MediaPlayer直接访问缓冲区。

但是,如果您使用的是APIPCM16(Android4.1),则可以使用内置的MediaCodec类将MP3文件解码为原始的>=流。您可以对数据执行分析,然后将其传递给AudioTrack进行输出。This blog post展示了如何解码和发送到音轨的示例。

如果您必须支持较低的API级别,则可以以相同的方式使用第三方库。我过去使用过JLayer,但它的性能高度依赖于硬件。在一些低端设备上,你将无法实时解码。

票数 4
EN

Stack Overflow用户

发布于 2013-12-17 10:45:02

Generic Holiday Name的答案是正确的,没有办法访问MediaPlayer的缓冲区,但还有其他不需要第三方库的选项。我提到这些是为了完整性,因为前面提到的JLayer库可能是更简单的解决方案。

第一种方法是在设备上编写一个简单的服务器,并将MediaPlayer连接到本地主机地址。您可以在将数据发送到MediaPlayer之前对其进行处理。这种方法的缺点是,您需要某种方法将数据从mp3解码到PCM,以使其具有通用性。

第二种选择是使用原生代码和OpenSL,尽管对它的支持只能追溯到API9。构建一个简单的播放器相对简单,您可以轻松地直接访问PCM数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20618667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档