1

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

考虑这种情况;

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

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

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

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

4

1 回答 1

0

我也发现这不清楚,因为 Android 文档并没有真正说明。但是,关于 SO 有几个答案,人们确认您的两个选项中的第一个是正确的 - 该方法会阻塞,直到有足够的数据可用。 查看此问题的第二个答案以获得相当详细的解释

于 2013-05-20T10:34:39.550 回答