如何在连续添加新数据的同时安全地删除QByteArray的第一个字节?

时间:2013-09-12 09:04:39

标签: audio-streaming qbytearray

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

例如

;我有一个数据,包括字母(保存在QBuffer和流停止):

a b c d e f g

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

c d e f g

但是如果我在数据流入缓冲区时使用remove()函数,我会在缓冲区的末尾获得覆盖的音频数据,例如如果我在添加'f'字母之前使用QByteArray :: remove(0,1)函数(我在数组中有一个b c d e,我会在添加f,g字母之前删除前两个字母)

我希望看到;

缓冲区中的

[c d e f g]但结果如下:

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

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

1 个答案:

答案 0 :(得分:0)

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