【问题标题】:How to remove first Bytes of QByteArray safely while adding new data continuously end of it?如何在不断添加新数据的同时安全地删除 QByteArray 的第一个字节?
【发布时间】:2013-09-16 14:03:44
【问题描述】:

我正在使用 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)]

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

【问题讨论】:

    标签: audio-streaming qbytearray


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。你说得对,那是我的计划,我会继续努力。
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 2013-11-16
    • 2020-09-06
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多