我想在我的Android手机上录制人声。我注意到Android有两个类可以做到这一点:AudioRecord和MediaRecorder。有人可以告诉我两者之间的区别是什么?
我希望能够实时分析人类语音以测量幅度等。我是否正确理解AudioRecord更适合此任务?
我在Android官方指南网页上注意到了用于录制音频的内容,他们使用MediaRecorder却没有提到AudioRecord。
我想在我的Android手机上录制人声。我注意到Android有两个类可以做到这一点:AudioRecord和MediaRecorder。有人可以告诉我两者之间的区别是什么?
我希望能够实时分析人类语音以测量幅度等。我是否正确理解AudioRecord更适合此任务?
我在Android官方指南网页上注意到了用于录制音频的内容,他们使用MediaRecorder却没有提到AudioRecord。
Answers:
如果要在记录仍在进行时进行分析,则需要使用AudioRecord
,因为会MediaRecorder
自动记录到文件中。AudioRecord
缺点是调用后startRecording()
需要自己从AudioRecord
实例中轮询数据。另外,您必须足够快地读取和处理数据,以免内部缓冲区溢出(在logcat输出中查看,AudioRecord
将告诉您何时发生此情况)。
据我了解,MediaRecorder
是一个黑匣子,它在输出中提供压缩的音频文件,并且AudioRecorder
仅提供原始声音流,您必须自己对其进行压缩。
MediaRecorder
为您提供自上次调用getMaxAmplitude()
方法以来的最大安培数,因此您可以实现一个声音可视化程序。
因此,在大多数情况下MediaRecorder
是最佳选择,除了那些情况下,您应该进行一些复杂的声音处理并且需要访问原始音频流。
AudioRecorderer首先将数据保存在minBuffer中,然后将其从那里复制到临时缓冲区中,在MediaRecorder中将其复制到文件中。在AudioRecorder中,我们需要api setRecordPosition()将保存的数据复制到所需位置,而在MediaRecorder中,文件指针是用来设置标记位置的。AudioRecorder可用于在模拟器上运行的那些应用程序,这可以通过提供较低的采样率(例如8000)来完成,而使用MediaRecorder时,无法使用模拟器录制音频。在AudioRecord中,屏幕会在一段时间后进入休眠状态,而在MediaRecorder中,屏幕不会进入休眠状态。