Fill QByteArray from QAudioBuffer
Fill QByteArray from QAudioBuffer
我的目标是将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()文档,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();
您使用的方法QByteArray::append做了一些超出预期的事情。您正在使用的这种追加重载会追加字节,直到遇到零为止。此API应用于c字符串!
所以修复代码如下:
QByteArray byteArr; // there is no point of create this on heap
byteArr.reserve(8*1024*1024); // reserve 8 MB - it will improve performance
void AudioRecorder::processBuffer(const QAudioBuffer &buffer)
{
byteArr.append(buffer.constData<char>(), buffer.size());
qDebug() << buffer.byteCount();
qDebug() << byteArr.size();
}
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- Calling Python Script from Visual Studio C++ Solution
- Fill QByteArray from QAudioBuffer