我正在使用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)]
有谁知道如何解决这个问题?
答案 0 :(得分:0)
调用remove()效率很低,因为所有数据都必须在内存中移动。最好有两个缓冲区(数组)。你写的一个和你读的一个。清空读取缓冲区时,将交换缓冲区。我在这里做了类似的事情audiocapdevice.h,audiocapdevice.cpp