本页内容

QAudioBuffer Class

QAudioBuffer 类表示一组具有特定格式和采样率的音频样本。更多内容...

头文件: #include <QAudioBuffer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia

公共类型

公共函数

QAudioBuffer()
QAudioBuffer(const QByteArray &data, const QAudioFormat &format, qint64 startTime = -1)
QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime = -1)
QAudioBuffer(const QAudioBuffer &other)
QAudioBuffer(QAudioBuffer &&other)
~QAudioBuffer()
qsizetype byteCount() const
const T *constData() const
T *data()
const T *data() const
void detach()
qint64 duration() const
QAudioFormat format() const
qsizetype frameCount() const
bool isValid() const
qsizetype sampleCount() const
qint64 startTime() const
void swap(QAudioBuffer &other)
QAudioBuffer &operator=(QAudioBuffer &&other)
QAudioBuffer &operator=(const QAudioBuffer &other)

详细说明

QAudioDecoder 类使用QAudioBuffer将解码后的音频数据传递给应用程序。音频缓冲区包含以特定QAudioFormat 格式存储的数据,可通过format()方法进行查询。此外,该缓冲区还带有时间戳和时长信息。

要访问缓冲区中存储的数据,请使用data() 或constData() 方法。

音频缓冲区是显式共享的,在大多数情况下,您应在修改数据之前调用detach() 方法。

成员类型文档

QAudioBuffer::F32M

这是一个针对 32 位浮点单声道采样的预定义特化。

QAudioBuffer::F32S

这是一个针对 32 位浮点立体声采样的预定义专用配置。

QAudioBuffer::S16M

这是一个针对有符号 16 位单声道采样的预定义特化。i

QAudioBuffer::S16S

这是一个针对带符号立体声 16 位采样的预定义特化类型。每个通道都是一个带符号的短整型。

QAudioBuffer::S32M

这是一个针对带符号 32 位单声道采样的预定义特化。

QAudioBuffer::S32S

这是一个针对带符号 32 位立体声采样的预定义特化类型。

QAudioBuffer::U8M

这是一个针对无符号 8 位单声道采样的预定义特化形式。

QAudioBuffer::U8S

这是一个针对无符号 8 位立体声采样的预定义特化形式。

成员函数文档

[noexcept] QAudioBuffer::QAudioBuffer()

创建一个新的、空的、无效的缓冲区。

QAudioBuffer::QAudioBuffer(const QByteArray &data, const QAudioFormat &format, qint64 startTime = -1)

根据提供的data ,在指定的format 中创建一个新的音频缓冲区。格式将决定如何根据data 来解释采样点数量和大小。

如果传入的data 不是计算得出的帧大小的整数倍,则多余的数据将不予使用。

该音频缓冲区将复制data 的内容。

startTime (单位:微秒)表示该缓冲区在流中的起始位置。如果该缓冲区不属于任何流,请将其设置为 -1。

QAudioBuffer::QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime = -1)

创建一个新的音频缓冲区,其容量足以容纳numFrames 帧的指定format 。各个采样点将被初始化为该格式的默认值。

startTime (单位:微秒) 表示该缓冲区在流中的起始位置。如果该缓冲区不属于任何流,请将其设置为 -1。

[noexcept] QAudioBuffer::QAudioBuffer(const QAudioBuffer &other)

从other 创建一个新的音频缓冲区。音频缓冲区是显式共享的,您应调用缓冲区的detach()方法来创建一个副本,然后才能对该副本进行修改。

[constexpr noexcept default] QAudioBuffer::QAudioBuffer(QAudioBuffer &&other)

通过从other 移动数据来构建一个QAudioBuffer。

[noexcept] QAudioBuffer::~QAudioBuffer()

销毁此音频缓冲区。

[noexcept] qsizetype QAudioBuffer::byteCount() const

返回该缓冲区的大小(以字节为单位)。

template <typename T> const T *QAudioBuffer::constData() const

返回指向该缓冲区数据的指针。该指针仅支持读取操作。

与data() 的 const 版本相比,建议优先使用此方法,以避免不必要的复制。

请注意,该函数不会对音频缓冲区的格式进行任何检查——这仅仅是一个便捷函数。

// With a 16bit sample buffer:
const quint16 *data = buffer->constData<quint16>();

template <typename T> T *QAudioBuffer::data()

返回指向该缓冲区数据的指针。您可以通过返回的指针修改数据。

由于QAudioBuffer 对象是显式共享的,因此在通过此函数修改数据之前,通常应先调用detach()。

请注意,该函数不会对音频缓冲区的格式进行任何检查——这仅仅是一个便捷函数。

// With a 16bit sample buffer:
quint16 *data = buffer->data<quint16>(); // May cause deep copy

template <typename T> const T *QAudioBuffer::data() const

返回指向该缓冲区数据的指针。该指针仅支持读取操作。

为避免意外的深拷贝,应使用constData()函数,而非此函数。

请注意,该函数不会对音频缓冲区的格式进行任何检查——这仅仅是一个便捷函数。

// With a 16bit sample const buffer:
const quint16 *data = buffer->data<quint16>();

void QAudioBuffer::detach()

将此音频缓冲区与其他可能与其共享数据的副本分离。

[noexcept] qint64 QAudioBuffer::duration() const

返回该缓冲区中音频的时长,单位为微秒。

这取决于 `format()` 和 `frameCount()` 函数。

[noexcept] QAudioFormat QAudioBuffer::format() const

返回该缓冲区的format 。

该格式的若干属性会影响从frameCount()中计算duration()或byteCount()的方式。

[noexcept] qsizetype QAudioBuffer::frameCount() const

返回该缓冲区中完整的音频帧的数量。

一个音频帧是由同一时间点各声道各一个采样点交错排列而成的集合。

[noexcept] bool QAudioBuffer::isValid() const

如果这是一个有效的缓冲区,则返回 true。有效的缓冲区应包含不为零的帧数,且格式有效。

[noexcept] qsizetype QAudioBuffer::sampleCount() const

返回该缓冲区中的采样数。

如果该缓冲区的格式包含多个声道,则此计数包含所有声道。这意味着一个总计包含 1000 个采样点的立体声缓冲区将包含 500 个左声道采样点和 500 个右声道采样点(交错排列),而该函数将返回 1000。

另请参阅 frameCount()。

[noexcept] qint64 QAudioBuffer::startTime() const

返回该缓冲区在流中的起始时间(单位为微秒)。

如果该缓冲区不属于任何流,则返回 -1。

[noexcept] void QAudioBuffer::swap(QAudioBuffer &other)

使用other 交换音频缓冲区。

[noexcept] QAudioBuffer &QAudioBuffer::operator=(QAudioBuffer &&other)

将other 移动到此处:QAudioBuffer 。

QAudioBuffer &QAudioBuffer::operator=(const QAudioBuffer &other)

将other 缓冲区分配给此对象。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.