gpt4 book ai didi

c++ - 从 QAudioBuffer 填充 QByteArray

转载 作者:太空狗 更新时间:2023-10-29 20:36:37 25 4
gpt4 key购买 nike

我的目标是将 QAudioRecorder 录音保存到内存中。根据我的研究,存储录音的最佳方式似乎是使用 QByteArray。使用 QAudioProbe 探测我的录音机。

audioBufferProbed 信号中,我尝试使用此插槽方法将数据附加到字节数组。

QByteArray *byteArr;

void AudioRecorder::processBuffer(const QAudioBuffer &buffer)
{
byteArr->append(buffer.constData<char>());
qDebug() << buffer.byteCount();
qDebug() << byteArr->size();
}

然而,考虑到 buffer.byteCount(); 不断返回 4092 这似乎是正常的,但 byteArr->size(); 返回奇怪且不规则,这似乎不起作用增量通常从 2、4、6、7、189 开始。

数据通常最终也只有大约 18kb 大小,这也让我相信数据没有被正确地附加到字节数组中。

根据QByteArray::size() docs size() 应该给出数组中有多少字节。连同 QAudioBuffer::byteCount()这也应该给出当前缓冲区中的字节数,难道不应该将缓冲区中的完整 4092 复制到数组中吗?

如果有更好的方法来存储数据,我也愿意接受另一种不使用 QByteArray 的解决方案。

最佳答案

您有一个 QByteArray 指针,但尚未将其设置为任何内容。

您需要将其设置为 QByteArray,在您的情况下,您可以使用 QByteArray(const char * data, int size):

byteArr = new QByteArray(buffer.constData<char>(), buffer.byteCount());

但老实说,我不确定你为什么要使用指针。

你可以这样做:

QByteArray byteArr; // Your global declaration 
:
:
byteArr.append(buffer.constData<char>(), buffer.byteCount());

如果您使用的是二进制数据,您可能想尝试这样打印...:

qDebug() << byteArr.toHex();

关于c++ - 从 QAudioBuffer 填充 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577036/

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