Android AudioRecord读取方法:它能读取的数据多于记录的数据吗?

时间:2013-03-21 13:53:46

标签: android audiorecord

我对Android AudioRecord类有很多问题。我一直对AudioRecord中的read方法如何工作感到困惑,希望有人可以回答......

考虑这种情况;

  1. 我创建了一个新的AudioRecord对象,其sampleRateInHz值为44100hz
  2. 然后我调用startRecording()方法,设备开始录制来自麦克风的输入。
  3. 以后我花了500ms(或22050个样本)调用read方法并尝试将44100个样本读入一个长度为44100的新数组中。
  4. 由于AudioRecord对象仅录制了500ms(或22050个样本)并且我正在尝试读取最后的44100个样本,会发生什么?我可能的想法是;

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

    我已经尝试用我的Android设备进行不知疲倦的测试,但测试真的不是一件容易的事。我需要更多的心思来回答......任何帮助都赞赏...

1 个答案:

答案 0 :(得分:0)

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