【问题标题】:Android AudioRecord read method: Can it ever read more data than has been recorded?Android AudioRecord 读取方法:它可以读取比已记录更多的数据吗?
【发布时间】:2013-03-21 13:53:46
【问题描述】:

我在使用 android AudioRecord 类时遇到了很多问题。我一直对 AudioRecord 中的 read 方法如何工作感到困惑,希望有人能回答...

考虑这种情况;

  1. 我创建了一个新的 AudioRecord 对象,其 sampleRateInHz 值为 44100hz
  2. 然后我调用 startRecording() 方法,设备开始录制来自麦克风的输入。
  3. 正好 500 毫秒(或 22050 个样本)之后,我调用 read 方法并尝试将 44100 个样本读入一个长度为 44100 的新数组中。

由于 AudioRecord 对象只记录了 500 毫秒(或 22050 个样本),而我试图读取最后的 44100 个样本,会发生什么情况?我可能的想法是;

  • 读取方法将休眠 500 毫秒,直到有足够的数据可用,然后读取所有 44100 个记录样本,或者
  • read 方法将读取 AudioRecord 缓冲区(在 AudioRecord 对象内)中的内容,无论已记录了多少数据。因此,在这种情况下,前 22050 个样本将包含从麦克风记录的数据,随后的 22050 个样本将包含零,因为读取函数正在访问尚未写入的缓冲区区域。

我已经不知疲倦地尝试用我的 android 设备对此进行测试,但这确实不是一件容易测试的事情。回答需要比我更大的头脑......任何帮助表示赞赏......

【问题讨论】:

    标签: android audiorecord


    【解决方案1】:

    我也发现这不清楚,因为 Android 文档并没有真正说明。但是,关于 SO 有几个答案,人们确认您的两个选项中的 first 是正确的 - 该方法会阻塞,直到有足够的数据可用。 Have a look at the second answer to this question for a rather detailed explanation.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多