如何使用 MediaRecorder 获取录制声音的每个频率?

Posted

技术标签:

【中文标题】如何使用 MediaRecorder 获取录制声音的每个频率?【英文标题】:How to get each frequency of recording sound using MediaRecorder? 【发布时间】:2015-11-21 13:03:46 【问题描述】:

VisualizerView 通过链接处理文件,但它与 MediaRecorder 不同。 MediaRecorder getMaxAmplitude() 函数只返回最高值,但我需要为每个频率获取一个字节数组。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

我终于找到了一个解决方案,而且做起来并不难。有一种方法可以实时捕获 fft 数据。这是我的例子,

    recordingThread = new VisualizerAudioRecordingThread(fileName, new VisualizerAudioRecordingHandler() 
        //pass file name where to store the recorded audio
        @Override
        public void onFftDataCapture(final byte[] bytes) 
            onActivity.runOnUiThread(new Runnable() 
                public void run() 
                    if (Dialog.mVisualizerView != null) 
                        Dialog.mVisualizerView.updateVisualizerFFT(bytes); //update VisualizerView with new audio portion
                    
                
            );
        

        @Override
        public void onRecordSuccess() 
        

        @Override
        public void onRecordingError() 

        @Override
        public void onRecordSaveError() 
    );
    recordingThread.start();
    

这里是完整的例子,我从哪里得到这些信息, https://github.com/steelkiwi/androidRecording

【讨论】:

【参考方案2】:

VisualizerView 链接到 MediaPlayer,而不是 MediaRecorder。

您无法通过 MediaRecorder 实时访问 AudioEncoder 内部发生的事情,只能接收可能发生的任何错误...

也许如果您将音频保存到文件中然后对其进行处理可以解决您的问题?

http://developer.android.com/guide/topics/media/audio-capture.html

【讨论】:

我也在这样做,有两种选择,一种是播放录制的声音,另一种是录制并播放录制的声音效果很好。现在,我想在记录时向视图添加一个可视化工具。 根据 Android 开发人员文档中的 Visualizer 类描述:“Visualizer 类使应用程序能够检索当前播放的音频的一部分以用于可视化目的。”注意“播放音频”部分。据我所知,它在录制时不可用...

以上是关于如何使用 MediaRecorder 获取录制声音的每个频率?的主要内容,如果未能解决你的问题,请参考以下文章

使用MediaRecorder录制音频

Google 通过 MediaRecorder API 满足流媒体需求

如何在 Android 中以更好的质量录制声音并降低噪音

如何在android中录制麦克风和媒体播放器

如何通过手机录制应用程序的声音

仅当音频高于特定声级时如何录制音频?