QAudioSink 类
QAudioSink 类提供了一个向音频输出设备发送音频数据的接口。更多...
头文件 | #include <QAudioSink> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake | QT += multimedia |
继承 | QObject |
公共函数
QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
virtual | ~QAudioSink() |
qsizetype | bufferSize() const |
qsizetype | bytesFree() const |
qint64 | elapsedUSecs() const |
QtAudio::Error | error() const |
QAudioFormat | format() const |
bool | isNull() const |
qint64 | processedUSecs() const |
void | reset() |
void | resume() |
void | setBufferSize(qsizetype value) |
void | setVolume(qreal volume) |
void | start(QIODevice *device) |
QIODevice * | start() |
QtAudio::State | state() const |
void | stop() |
void | suspend() |
qreal | volume() const |
信号
void | stateChanged(QtAudio::State state) |
详细描述
您可以使用系统的默认音频输出设备来构建音频输出。也可以使用特定的 QAudioDevice 创建 QAudioSink。在创建音频输出时,还应传入用于播放的 QAudioFormat(有关详细信息,请参阅 QAudioFormat 类描述)。
播放文件
播放音频流只需要调用 start() 并传入一个 QIODevice。然后 QAudioSink 将从 IO 设备获取所需的数据。因此,播放音频文件就像这样
QFile sourceFile; // class member. QAudioSink* audio; // class member. { sourceFile.setFileName("/tmp/test.raw"); sourceFile.open(QIODevice::ReadOnly); QAudioFormat format; // Set up the format, eg. format.setSampleRate(8000); format.setChannelCount(1); format.setSampleFormat(QAudioFormat::UInt8); QAudioDevice info(QMediaDevices::defaultAudioOutput()); if (!info.isFormatSupported(format)) { qWarning() << "Raw audio format not supported by backend, cannot play audio."; return; } audio = new QAudioSink(format, this); connect(audio, QAudioSink::stateChanged, this, &AudioInputExample::handleStateChanged); audio->start(&sourceFile); }
如果音频系统和输出设备支持,文件将开始播放。如果您运气不佳,请检查 error() 函数 的错误。
文件播放完毕后,我们需要停止设备
void AudioOutputExample::stopAudioOutput() { audio->stop(); sourceFile.close(); delete audio; }
在任意时刻,QAudioSink 都会处于以下四种状态之一:活动、挂起、停止或空闲。这些状态由 QtAudio::State 枚举描述。状态变化通过 stateChanged() 信号 报告。可以使用这个信号来更新应用程序的 GUI,例如,切换 播放/暂停
按钮的状态。您可以直接通过 suspend()()、stop()()、reset()()、resume()() 和 start()() 来请求状态变化。
如果发生错误,可以使用 error() 函数 获取错误类型。有关报告的可能错误的描述,请参见 QtAudio::Error 枚举。当遇到 QtAudio::UnderrunError 时,状态将变为 QtAudio::IdleState,当遇到其他错误时,状态将变为 QtAudio::StoppedState。您可以通过连接到 stateChanged() 信号 来检查错误
void AudioOutputExample::handleStateChanged(QAudio::State newState) { switch (newState) { case QAudio::IdleState: // Finished playing (no more data) AudioOutputExample::stopAudioOutput(); break; case QAudio::StoppedState: // Stopped for other reasons if (audio->error() != QAudio::NoError) { // Error handling } break; default: // ... other cases as appropriate break; } }
另请参阅 QAudioSource 和 QAudioDevice。
成员函数文档
[显式]
QAudioSink::QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
构造一个新的音频输出并将其附加到 parent。使用输出 format 参数使用默认音频输出设备。
[显式]
QAudioSink::QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
构造一个新的音频输出并将其附加到 parent。使用 audioDevice 指引用的设备与输出 format 参数一起使用。
[虚 noexcept]
QAudioSink::~QAudioSink()
销毁此音频输出。
这将会释放所使用的任何系统资源,并释放所有缓冲区。
qsizetype QAudioSink::bufferSize() const
返回音频缓冲区的大小(以字节为单位)。
在调用 start() 之前,返回平台默认值。在调用 start() 但之前已调用 setBufferSize(),则返回由 setBufferSize() 设置的值。在调用 start() 之后,返回正在使用的实际缓冲区大小。这可能不是之前由 setBufferSize() 设置的值。
另请参阅 setBufferSize。
qsizetype QAudioSink::bytesFree() const
返回音频缓冲区中可用的空闲字节数。
注意:返回的值仅在处于 QtAudio::ActiveState 或 QtAudio::IdleState 状态时有效,否则返回零。
qint64 QAudioSink::elapsedUSecs() const
返回自调用start()以来经过的微秒,包括空闲和挂起状态的时间。
QtAudio::Error QAudioSink::error() const
返回错误状态。
QAudioFormat QAudioSink::format() const
返回正在使用的QAudioFormat。
bool QAudioSink::isNull() const
如果QAudioSink实例为空,则返回true
,否则返回false
。
qint64 QAudioSink::processedUSecs() const
返回自调用start()以来处理的音频数据量(以微秒为单位)。
void QAudioSink::reset()
丢弃缓冲区中的所有音频数据,将缓冲区重置为零。
void QAudioSink::resume()
在挂起后,继续处理音频数据。
将state()设置为挂起时suspend()时的状态,并将error()设置为QAudioError::NoError。如果音频插件的状态不是QtAudio::SuspendedState,则此函数不做任何事情。
void QAudioSink::setBufferSize(qsizetype value)
将音频缓冲区大小设置为以字节为单位的value。
注意:此函数可以在start()之前任何时候调用。在start()之后对此的调用会被忽略。不应假设设置的缓冲区大小是实际使用的缓冲区大小 - 后start()后任何时候调用bufferSize()以返回实际正在使用的缓冲区大小。
另请参阅:bufferSize。
void QAudioSink::setVolume(qreal volume)
将输出音量设置为volume。
音量按线性从0.0
(静音)到1.0
(全音量)缩放。在此范围以外的值将被截断。
默认音量为1.0
。
注意:音量调整将改变此音频流的音量,而不是全局音量。
UI音量控件通常应该是非线性的。例如,使用对数尺度将产生感知响度的线性变化,这是用户通常期望的音量控件的行为。有关详细信息,请参阅QtAudio::convertVolume。
另请参阅:volume。
void QAudioSink::start(QIODevice *device)
开始从设备传输音频数据到系统音频输出。该设备必须在只读或读写模式下打开。
如果QAudioSink成功输出音频数据,state()返回QtAudio::ActiveState,error()返回QtAudio::NoError,并将stateChanged()信号发出。
如果在过程中出现问题,error()将返回QtAudio::OpenError,state()将返回QtAudio::StoppedState,并将stateChanged()信号发出。
另请参阅QIODevice。
QIODevice *QAudioSink::start()
返回一个指针,指向用于传输数据到系统音频输出的内部QIODevice。设备将已打开,可以直接调用write()写入数据。
注意:在流停止或启动另一个流后,指针将无效。
如果QAudioSink能够访问系统音频设备,state()将返回QtAudio::IdleState,error()将返回QtAudio::NoError,并将stateChanged()信号发出。
如果在过程中出现问题,error()将返回QtAudio::OpenError,state()将返回QtAudio::StoppedState,并将stateChanged()信号发出。
另请参阅QIODevice。
QtAudio::State QAudioSink::state() const
返回音频处理的状态。
[signal]
void QAudioSink::stateChanged(QtAudio::State state)
当设备状态state发生变化时,会发出此信号。这是当前音频输出的状态。
注意:直到并包括Qt 6.6,QtAudio命名空间被称为QAudio。基于字符串的连接到此信号的参数类型必须使用QAudio::State
:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);
void QAudioSink::stop()
停止音频输出,脱离系统资源。
将error()设置为QtAudio::NoError,将state()设置为QtAudio::StoppedState,并发出stateChanged()信号。
void QAudioSink::suspend()
停止处理音频数据,保留缓冲区中的音频数据。
将error()设置为QtAudio::NoError,将state()设置为QtAudio::SuspendedState,并发出stateChanged()信号。
qreal QAudioSink::volume() const
返回介于0.0和1.0之间的音量。
另请参阅setVolume。
© 2024 Qt 公司有限公司。本页面中包含的文档贡献均为各自所有者的版权。提供的文档受 GNU 自由文档许可协议第 1.3 版 许可,该协议由自由软件基金会发布。Qt 及相应标志是芬兰及世界各地的 Qt 公司的商标。所有其他商标均为各自所有者的财产。