【问题标题】:Android AudioRecord vs. MediaRecorder for recording audio用于录制音频的 Android AudioRecord 与 MediaRecorder
【发布时间】:2011-08-18 17:10:55
【问题描述】:

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

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

我注意到官方的 Android guide webpage for recording audio,他们使用 MediaRecorder,没有提到 AudioRecord。

【问题讨论】:

    标签: android audio-recording audiorecord


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你有AudioRecord的示例代码吗?我发现的大多数是 MediaRecorder...
      • @RommelParas 在“telegram”中查看这个类以获取 android 源代码。 github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
      • @David 你知道更基本的示例吗?一个可以独立工作的?
      • @androiddeveloper 很遗憾没有。
      【解决方案3】:

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

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

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

      【讨论】:

      • 感谢您提及 getMaxAmplitude() 方法。这很可能就是我所需要的。
      • 如何使用 MediaRecorder 实现可视化?
      • getMaxAmplitude 在这里有什么帮助?您不需要在每个时刻都为可视化器获取当前的吗?
      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多