Android AudioRecord 与 MediaRecorder 用于录制音频

Android AudioRecord vs. MediaRecorder for recording audio

提问人:stackoverflowuser2010 提问时间:5/5/2011 最后编辑:stackoverflowuser2010 更新时间:7/13/2018 访问量:28835

问:

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

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

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

Android 录音 AudioRecord

评论


答:

94赞 Stephan 5/5/2011 #1

如果要在记录仍在进行时进行分析,则需要使用 ,因为自动记录到文件中。 缺点是调用后需要自己从实例中轮询数据。此外,您必须足够快地读取和处理数据,以便内部缓冲区不会溢出(查看 logcat 输出,当发生这种情况时会告诉您)。AudioRecordMediaRecorderAudioRecordstartRecording()AudioRecordAudioRecord

评论

0赞 Rommel Paras 9/12/2014
你有AudioRecord的示例代码吗?我发现的大多数都是 MediaRecorder......
0赞 David 11/14/2016
@RommelParas在“Telegram”中查看 Android 源代码的此类。github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/......
0赞 android developer 6/24/2018
@David 你知道一个更基本的样本吗?一个可以独立工作的人?
0赞 David 6/25/2018
@androiddeveloper很遗憾没有。
21赞 sanjeev51 4/15/2013 #2

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

42赞 Lampapos 10/7/2013 #3

据我了解,这是一个黑匣子,它在输出上提供压缩的音频文件,并为您提供原始声音流,您必须自己压缩它。MediaRecorderAudioRecorder

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

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

评论

1赞 Dheeraj Bhaskar 3/21/2014
感谢您提及 getMaxAmplitude() 方法。这很可能就是我所需要的。
0赞 OnePunchMan 3/30/2015
如何使用 MediaRecorder 实现可视化工具?
1赞 android developer 6/24/2018
getMaxAmplitude 在这里究竟有什么帮助?难道你不需要每时每刻都为可视化工具获取当前的一个吗?