Android AudioRecord与MediaRecorder一起录制音频


91

我想在我的Android手机上录制人声。我注意到Android有两个类可以做到这一点:AudioRecordMediaRecorder。有人可以告诉我两者之间的区别是什么?

我希望能够实时分析人类语音以测量幅度等。我是否正确理解AudioRecord更适合此任务?

我在Android官方指南网页上注意到了用于录制音频的内容,他们使用MediaRecorder却没有提到AudioRecord。

Answers:


82

如果要在记录仍在进行时进行分析,则需要使用AudioRecord,因为会MediaRecorder自动记录到文件中。AudioRecord缺点是调用后startRecording()需要自己从AudioRecord实例中轮询数据。另外,您必须足够快地读取和处理数据,以免内部缓冲区溢出(在logcat输出中查看,AudioRecord将告诉您何时发生此情况)。


您有AudioRecord的示例代码吗?我发现的大多数影片都是MediaRecorder ...
Rommel Paras

@RommelParas在“ telegram”中的此类中查找android源代码。github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…–
David

@David您知道更基本的示例吗?一个能独立工作的人吗?
Android开发人员

@androiddeveloper不幸的是没有。
戴维

33

据我了解,MediaRecorder是一个黑匣子,它在输出中提供压缩的音频文件,并且AudioRecorder仅提供原始声音流,您必须自己对其进行压缩。

MediaRecorder为您提供自上次调用getMaxAmplitude()方法以来的最大安培数,因此您可以实现一个声音可视化程序。

因此,在大多数情况下MediaRecorder是最佳选择,除了那些情况下,您应该进行一些复杂的声音处理并且需要访问原始音频流。


感谢您提到getMaxAmplitude()方法。那是我最需要的。
Dheeraj Bhaskar 2014年

如何使用MediaRecorder实施可视化工具?
OnePunchMan 2015年

getMaxAmplitude在这里到底有什么帮助?您是否不需要在每时每刻都为可视化工具获得最新的图像?
Android开发人员

18

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.