96

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

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

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

4

3 回答 3

89

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

于 2011-05-04T19:04:42.143 回答
36

据我了解MediaRecorder是一个黑匣子,它在输出上提供压缩的音频文件,AudioRecorder只给你原始的声音流,你必须自己压缩它。

MediaRecorder为您提供上次调用getMaxAmplitude()方法的最大振幅,以便您可以实现例如声音可视化器。

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

于 2013-10-07T14:29:43.747 回答
19

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

于 2013-04-15T08:33:33.350 回答