gpt4 book ai didi

android - AudioRecord 缓冲区如何工作/如何使用它

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:46 28 4
gpt4 key购买 nike

我正在尝试使用 Android AudioRecord 库,试图让应用程序连续从 audioBuffer 读取数据。我认为要让我的应用程序正常工作,我需要更好地了解如何使用构造函数初始化缓冲区。

例如,如果我初始化一个新的 AudioRecord 对象:

recorder = new AudioRecord(AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, 
AudioFormat.ENCODING_PCM_16BIT, 2205000); //50 seconds worth

在应用程序中,我想将最后 50 秒的数据保存在此处初始化的缓冲区中,但我想定期取出最后 10 秒的数据(如果满足条件,则取出整个 50 秒)。

首先,根据我的理解,recorder.read(short readData[...) 函数将内部缓冲区的一部分复制到我传入的数组中(?)。

我猜内部缓冲区是某种环形缓冲区,那么我怎么知道最后一个样本是什么?或者这是在我调用 recorder.read(short readData[1000],0,1000) 时内部处理的吗?这会给我最后 1000 个样本,前 1000 个样本吗?据我所知,第二个参数(偏移量)偏移了它在 readData 参数中写入的位置。

谢谢!

最佳答案

当您调用recorder.read(...) 函数时,sizeInBytes 参数指定您要从内部缓冲区读取多少字节从尚未读取的最早数据开始 在缓冲区中。 offsetInBytes参数指的是你传入的数组,不是内部buffer。

如果你想读出整个缓冲区(50 毫秒),那么你需要传入一个数组(长度 >= 2205000)和一个 2205000 的 sizeInBytes。如果你只想要最近的 10 秒,那么你仍然有读取整个缓冲区,最近 10 秒将是返回的最后 441000 个字节。请注意,您不一定总是返回 2205000 个字节;如果您尝试以小于 50 毫秒的时间间隔读取这些数据量,那么您将在每次读取时获得可用的任何数据。但最新的数据将始终位于返回数据的末尾。

关于android - AudioRecord 缓冲区如何工作/如何使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16969993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com