Android AudioRecord与MediaRecorder录制audio

我想在我的Android手机上录制人声。 我注意到,Android有两个类来做到这一点: AudioRecord和MediaRecorder 。 有人能告诉我这两者之间有什么区别,什么是适当的用例?

我希望能够实时分析人类语音以测量幅度等。我认为AudioRecord更适合于这项任务,我是否正确?

我注意到在官方的Android 指南网页上录制audio ,他们使用MediaRecorder而没有提及AudioRecord。

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

据我了解MediaRecorder是一个黑盒子,它提供了输出压缩audio文件和AudioRecorder给你原始的声音stream,你必须自己压缩它。

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

所以在大多数情况下, MediaRecorder是最好的select,除了那些你应该做一些复杂的声音处理,你需要访问原始audiostream。

AudioRecorderer首先将数据保存在minBuffer中,然后将其复制到临时缓冲区,在MediaRecorder中将其复制到文件中。 在AudioRecorder中,我们需要api setRecordPosition()来将保存的数据复制到需要的位置,而在MediaRecorder中,文件指针是做这个工作来设置标记的位置。 AudioRecorder可以用于在仿真器上运行的应用程序,这可以通过提供低采样率(如8000)来完成,而使用MediaRecorder时,audio无法使用仿真器进行logging。 在AudioRecord屏幕hibernate一段时间后,而在MediaRecorder屏幕不睡觉。