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

3

VisualizerView可以通过链接的方式与文件一起工作,但对于MediaRecorder不是这样。MediaRecorder的getMaxAmplitude()函数只返回最高值,但我需要获得每个频率的字节数组。有没有办法做到这一点?

2个回答

2

最终我找到了一个解决方案,而且这并不难。有一种方法可以实时捕获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

1

VisualizerView连接的是MediaPlayer,而不是MediaRecorder。

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

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

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


我也在做这个,有两个选项,其中一个播放录制的声音,另一个是录制和播放录制的声音,都很好用。现在,我想在录制时将可视化器添加到视图中。 - dodo
根据Android开发者文档中的Visualizer类描述:“Visualizer类使应用程序能够检索当前播放音频的一部分以进行可视化目的。”请注意“正在播放的音频”部分。据我所知,在录制过程中是不可用的... - prc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接