我在使用 android AudioRecord 类时遇到了很多问题。我一直对 AudioRecord 中的 read 方法如何工作感到困惑,希望有人能回答...
考虑这种情况;
- 我创建了一个新的 AudioRecord 对象,其 sampleRateInHz 值为 44100hz
- 然后我调用 startRecording() 方法,设备开始录制来自麦克风的输入。
- 正好 500 毫秒(或 22050 个样本)之后,我调用 read 方法并尝试将 44100 个样本读入一个长度为 44100 的新数组。
由于 AudioRecord 对象只记录了 500 毫秒(或 22050 个样本),而我试图读取最后的 44100 个样本,会发生什么?我可能的想法是;
- read 方法会休眠 500ms,直到有足够的数据可用,然后读取所有 44100 个记录的样本,或者
- read 方法将读取 AudioRecord 缓冲区(在 AudioRecord 对象内)中的内容,无论已记录了多少数据。因此,在这种情况下,前 22050 个样本将包含从麦克风记录的数据,随后的 22050 个样本将包含零,因为读取函数正在访问尚未写入的缓冲区区域。
我一直在不知疲倦地尝试用我的 android 设备对此进行测试,但这确实不是一件容易测试的事情。回答需要比我更大的头脑...任何帮助表示赞赏...