QAudioSource Class
QAudioSource 类提供了一个从音频输入设备接收音频数据的接口。更多
头文件: | #include <QAudioSource> |
CMake.QAudioSource 类 | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake: | QT += multimedia |
继承: | QObject |
公共函数
QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
virtual | ~QAudioSource() override |
qsizetype | bufferSize() const |
qsizetype | bytesAvailable() 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) |
QIODevice * | start() |
void | start(QIODevice *device) |
QtAudio::State | state() const |
void | stop() |
void | suspend() |
qreal | volume() const |
信号
void | stateChanged(QtAudio::State state) |
详细说明
您可以使用系统默认的音频输入设备构建音频输入。也可以创建带有特定QAudioDevice 的 QAudioSource。创建音频输入时,还应发送用于录音的QAudioFormat (详见QAudioFormat 类说明)。
录制到文件:
QAudioSource 可让您使用音频输入设备录制音频。该类的默认构造函数将使用系统默认的音频设备,但您也可以为特定设备指定一个QAudioDevice 。您还需要输入您希望录制的QAudioFormat 。
启动 QAudioSource 只需调用start() 并打开QIODevice 进行写入即可。例如,要将音频录制到文件中,您可以
QFiledestinationFile;// 类成员QAudioSource*audio;// 类成员{ destinationFile.setFileName("/tmp/test.raw"); destinationFile.open( QIODevice::WriteOnly|::Truncate QIODevice::Truncate ); QAudioFormatformat;// 设置所需的格式,例如:format.setSampleRate(8000); format.setChannelCount(1); format.setSampleFormat(QAudioFormat::UInt8); QAudioDeviceinfo=QMediaDevices::defaultAudioInput();if(!info.isFormatSupported(format)) { qWarning() << "Default format not supported, trying to use the nearest."; } 音频= newQAudioSource(format, this); connect(audio, &QAudioSource::stateChanged, this, &AudioInputExample::handleStateChanged); QTimer::singleShot(3000, this, &AudioInputExample::stopRecording); audio->start(&destinationFile);// Records audio for 3000ms}
如果输入设备支持指定的格式,就会开始录音(可使用QAudioDevice::isFormatSupported() 进行检查)。如果出现任何问题,可使用error() 函数检查出错的原因。我们将在stopRecording()
时段停止录制。
void AudioInputExample::stopRecording() { audio->stop(); destinationFile.close(); delete audio; }
在任何时候,QAudioSource 都会处于以下四种状态之一:激活、暂停、停止或空闲。这些状态由QtAudio::State 枚举指定。您可以通过suspend(),resume(),stop(),reset() 和start() 直接请求改变状态。当前状态由state() 报告。当状态发生变化时,QAudioSink 也会向您发出信号(stateChanged() )。
QAudioSource 提供了几种方法来测量自start() 录制以来已过去的时间。processedUSecs()
函数以写入的微秒为单位返回数据流的长度,即不包括音频输入暂停或空闲的时间。elapsedUSecs() 函数返回自调用start() 以来的时间,与 QAudioSource 所处的状态无关。
如果发生错误,可以使用error() 获取错误原因。QtAudio::Error 枚举描述了可能的错误原因。当遇到错误时,QAudioSource 将进入StoppedState 。连接到stateChanged() 信号来处理错误:
void AudioInputExample::handleStateChanged(QAudio::State newState) { switch (newState) { case QAudio::StoppedState: if (audio->error() != QAudio::NoError) { // Error handling } else { // Finished recording } break; case QAudio::ActiveState: // Started recording - read from IO device break; default: // ... other cases as appropriate break; } }
另请参阅 QAudioSink 和QAudioDevice 。
成员函数文档
[explicit]
QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
创建一个新的音频输入,并将其连接到parent 。默认的音频输入设备与输出format 参数一起使用。
[explicit]
QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
创建一个新的音频输入,并将其连接到parent 。由audioDevice 引用的设备与输入format 参数一起使用。
[override virtual noexcept]
QAudioSource::~QAudioSource()
销毁此音频输入。
qsizetype QAudioSource::bufferSize() const
以字节为单位返回音频缓冲区大小。
如果在start() 之前调用,则返回平台默认值。如果在start() 之前调用setBufferSize() ,则返回setBufferSize() 设置的值。如果在start() 之后调用,则返回实际使用的缓冲区大小。这可能与setBufferSize() 之前设置的值不同。
另请参见 setBufferSize()。
qsizetype QAudioSource::bytesAvailable() const
以字节为单位返回可读取的音频数据量。
注意:返回值只有在QtAudio::ActiveState 或QtAudio::IdleState 状态下有效,否则返回 0。
qint64 QAudioSource::elapsedUSecs() const
返回调用start() 后的微秒数,包括闲置和挂起状态下的时间。
QtAudio::Error QAudioSource::error() const
返回错误状态。
QAudioFormat QAudioSource::format() const
返回正在使用的QAudioFormat 。
bool QAudioSource::isNull() const
如果音频源是null
,则返回true
,否则返回false
。
qint64 QAudioSource::processedUSecs() const
返回自调用start() 以来处理的音频数据量,单位为微秒。
void QAudioSource::reset()
删除缓冲区中的所有音频数据,将缓冲区重置为零。
void QAudioSource::resume()
在suspend() 之后恢复处理音频数据。
将error() 设为QtAudio::NoError 。如果之前调用了 start(QIODevice*),则将state() 设为QtAudio::ActiveState 。如果之前调用过start() ,则将state() 设置为QtAudio::IdleState 。发出stateChanged() 信号。
void QAudioSource::setBufferSize(qsizetype value)
将音频缓冲区大小设置为value 字节。
注意:此函数可在start() 之前随时调用,在start() 之后调用此函数将被忽略。不应认为所设置的缓冲区大小就是实际使用的缓冲区大小,在start() 之后随时调用bufferSize() 都将返回实际使用的缓冲区大小。
另请参阅 bufferSize()。
void QAudioSource::setVolume(qreal volume)
将输入音量设置为volume 。
音量从0.0
(静音)到1.0
(全音量)线性缩放。超出此范围的值将被箝位。
如果设备不支持调整输入音量,那么volume 将被忽略,输入音量将保持为 1.0。
默认音量为1.0
。
注意:调整音量将改变该音频流的音量,而不是全局音量。
另请参阅 volume() 。
QIODevice *QAudioSource::start()
返回用于从系统音频输入传输数据的内部QIODevice 的指针。该设备已经打开,read() 可以直接从中读取数据。
注意: 在停止数据流或启动其他数据流后,指针将失效。
如果QAudioSource 能够访问系统的音频设备,state() 将返回QtAudio::IdleState ,error() 将返回QtAudio::NoError ,并发出stateChanged() 信号。
如果在此过程中出现问题,error() 将返回QtAudio::OpenError,state() 将返回QtAudio::StoppedState 并发出stateChanged() 信号。
另请参见 QIODevice 。
void QAudioSource::start(QIODevice *device)
开始从系统音频输入端向device 传输音频数据。device 必须在WriteOnly 、Append 或ReadWrite 模式下打开。
如果QAudioSource 能够成功获取音频数据,state() 将返回QtAudio::ActiveState 或QtAudio::IdleState ,error() 将返回QtAudio::NoError ,并发出stateChanged() 信号。
如果在此过程中出现问题,error() 将返回QtAudio::OpenError ,state() 将返回QtAudio::StoppedState ,并发出stateChanged() 信号。
另请参见 QIODevice 。
QtAudio::State QAudioSource::state() const
返回音频处理的状态。
[signal]
void QAudioSource::stateChanged(QtAudio::State state)
该信号在设备state 发生变化时发出。
注意: 在 Qt 6.6 之前(包括 Qt 6.6),QtAudio 命名空间名为 QAudio。该信号的字符串连接必须使用QAudio::State
作为参数类型:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);
void QAudioSource::stop()
停止音频输入,脱离系统资源。
将error() 设为QtAudio::NoError ,将state() 设为QtAudio::StoppedState ,并发出stateChanged() 信号。
void QAudioSource::suspend()
停止处理音频数据,保留缓冲音频数据。
将error() 设置为QtAudio::NoError ,将state() 设置为QtAudio::SuspendedState ,并发出stateChanged() 信号。
qreal QAudioSource::volume() const
返回输入音量。
如果设备不支持调节输入音量,返回值将为 1.0。
另请参阅 setVolume()。
© 2025 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.