我想在我的Android手机上录制人声。我注意到Android有两个类来执行此操作:AudioRecord和MediaRecorder。有人可以告诉我两者之间有什么区别,每种情况的适当用例是什么?
我希望能够实时分析人类语音以测量振幅等。我是否理解AudioRecord更适合此任务?
我在官方的Android guide webpage for recording audio上注意到,他们使用的是MediaRecorder而没有提及AudioRecord。
答案 0 :(得分:70)
如果您想在录制过程中进行分析,则需要使用AudioRecord
,因为MediaRecorder
会自动记录到文件中。 AudioRecord
的缺点是,在调用startRecording()
之后,您需要自己从AudioRecord
实例轮询数据。此外,您必须足够快地读取和处理数据,以便内部缓冲区不会溢出(查看logcat输出,AudioRecord
将告诉您何时发生这种情况)。
答案 1 :(得分:27)
据我所知,MediaRecorder
是一个黑盒子,它在输出上提供压缩音频文件,而AudioRecorder
只为您提供原始声音流,您必须自己压缩它。
MediaRecorder
为您提供最后一次调用getMaxAmplitude()
方法的最大功能,以便您可以实现声音可视化工具。
所以在大多数情况下MediaRecorder
是最好的选择,除了你应该进行一些复杂的声音处理而你需要访问原始音频流的那些。
答案 2 :(得分:16)
AudioRecorderer首先将数据保存在minBuffer中,然后将其从那里复制到临时缓冲区,在MediaRecorder中将其复制到文件中。 在AudioRecorder中,我们需要api setRecordPosition()来复制所需位置的已保存数据,而在MediaRecorder中,文件指针可以完成此工作来设置标记的位置。 AudioRecorder可用于在仿真器上运行的那些应用程序,这可以通过提供低采样率(例如8000)来完成,而使用MediaRecorder时,无法使用仿真器记录音频。 在AudioRecord中,屏幕会在一段时间后休眠,而在MediaRecorder中,屏幕不会休眠。