android - 访问 MediaPlayer 中的音频缓冲区

标签 android audio fft android-mediaplayer spectrum

我正在从事 Android 项目,我必须在其中分析频域中的音频信号。实际上,我已经准备好模块,它正在从设备麦克风读取信号并对其进行处理(FFT、可视化等),我对这种信号没有任何问题。

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

您对我如何访问音频缓冲区有什么建议吗? MediaPlayer 完全有可能吗?还是我应该使用其他方法来解决这个问题?

最佳答案

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

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

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

关于android - 访问 MediaPlayer 中的音频缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618667/

相关文章:

android - Android ImageButton 背景的挑战

android - Android Studio 的 Gradle 测试(检测)

java - 使用 (Java) AudioInputStream 打开 wav 文件时出现问题

python - numpy 的快速傅里叶变换产生意想不到的结果

android - 如何在没有弃用方法 findPreference 的情况下为 android 4.0 + 设置首选项摘要

Android 多屏幕尺寸支持

cordova - 在 meteor Cordova 应用程序中播放本地音频

audio - 实时音频流容器格式

javascript - FFT 与 offlineAudioContext

c - 有什么方法可以在不使用 intel mkl 进行转置的情况下计算另一个维度的 2D FFT 的 1D FFT?