0

我正在使用 QAudioInput 的 start() 函数从麦克风接收音频数据。此函数将流数据添加到 QBuffer(数据进入 QByteArray)。如果那部分数据对我没有用,我想经常删除缓冲区的第一个字节。

例如; 我有一个包含字母的数据(保存在 QBuffer 中并停止流):

abcdefg

当我在这个数组上使用 QByteArray::remove(0,1) 函数时,我得到了我期望的结果:

cdefg

但是如果我在数据流入缓冲区时使用 remove() 函数,我会在缓冲区末尾得到覆盖的音频数据,例如,如果我在添加“f”字母之前使用 QByteArray::remove(0,1) 函数(我在数组中有 abcde,我将在添加 f、g 字母之前删除前两个字母)

我期待看到;

[cdefg] 在缓冲区中,但结果如下:

[c (d+f) (e+g)]

有谁知道如何解决这个问题?

4

1 回答 1

0

调用 remove() 效率很低,因为所有数据都必须在内存中移动。最好有两个缓冲区(数组)。一个你写的,一个你读的。当读取缓冲区被清空时,缓冲区被交换。我在这里做了类似的事情audiocapdevice.haudiocapdevice.cpp

于 2013-09-12T16:02:32.357 回答