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