2011-05-04 98 views
69

我想在我的Android手机上录制人声。我注意到Android有两个类来执行此操作:AudioRecordMediaRecorder。有人能告诉我这两者之间有什么区别,什么是适当的用例?Android AudioRecord vs. MediaRecorder录制音频

我希望能够分析实时人类语音来衡量幅度等我是正确的理解是AudioRecord更适合这项任务?

我的Android guide webpage for recording audio注意到了官方的,他们使用MediaRecorder没有提到AudioRecord的。

回答

58

如果您想在录制过程中进行分析,您需要使用AudioRecord,因为MediaRecorder会自动记录到文件中。 AudioRecord的缺点是,在调用startRecording()之后,您需要从AudioRecord实例中自行轮询数据。此外,您必须快速读取和处理数据,以便内部缓冲区不会溢出(请查看logcat输出,AudioRecord会告诉您何时发生这种情况)。

+0

您是否有AudioRecord的示例代码?我发现的大多数是MediaRecorder ... – 2014-09-12 02:19:29

+0

@RommelParas在“telegram”中为这个类找到这个类。 https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java – David 2016-11-14 07:45:42

13

AudioRecord首先将数据保存在minBuffer中,然后从那里复制到临时缓冲区,在MediaRecorder中将其复制到文件中。 在AudioRecord我们需要的API setRecordPosition()保存的数据在需要的位置进行复制,而在MediaRecorder文件指针是做这件工作来设置标记的位置。 AudioRecord可用于那些在仿真器上运行的应用程序,这可以通过提供低的采样率,例如8000,同时使用MediaRecorder音频不能使用模拟器进行记录来完成。 AudioRecord屏幕在某个时间后进入休眠状态,而在MediaRecorder屏幕不会进入休眠状态。

21

据我所知MediaRecorder是一个黑盒子,它给出输出压缩音频文件和AudioRecorder给你只是原始声音流,你必须自己压缩它。

MediaRecorder为您提供上次调用getMaxAmplitude()方法所需的最大灵活度,以便您可以实现声音可视化器。

所以在大多数情况MediaRecorder,除了那些在你应该做一些复杂的声音处理,你需要访问原始音频流的最佳选择。

+0

感谢您的提getMaxAmplitude()方法。这很可能是我所需要的。 – 2014-03-20 22:03:27

+0

如何使用MediaRecorder实现可视化器? – OnePunchMan 2015-03-30 10:00:26