QAudioSource 类
QAudioSource 类提供了一个 用于从音频输入设备接收音频数据的接口。 更多...
头文件 | #include <QAudioSource> |
CMake | 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() |
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) |
void | start(QIODevice *device) |
QIODevice * | start() |
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。例如,为了将音频记录到文件,您可以
QFile destinationFile; // Class member QAudioSource* audio; // Class member { destinationFile.setFileName("/tmp/test.raw"); destinationFile.open( QIODevice::WriteOnly | QIODevice::Truncate ); QAudioFormat format; // Set up the desired format, for example: format.setSampleRate(8000); format.setChannelCount(1); format.setSampleFormat(QAudioFormat::UInt8); QAudioDevice info = QMediaDevices::defaultAudioInput(); if (!info.isFormatSupported(format)) { qWarning() << "Default format not supported, trying to use the nearest."; } audio = new QAudioSource(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。
成员函数文档
[显式构造函数]
QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
构造一个新的音频输入并将其附加到 parent。默认音频输入设备与输出 format 参数一起使用。
[显式构造函数]
QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
构造一个新的音频输入并将其附加到 parent。使用 audioDevice 引用的设备与输入 format 参数一起使用。
[虚析构函数]
QAudioSource::~QAudioSource()
销毁此音频输入。
qsizetype QAudioSource::bufferSize() const
返回音频缓冲区大小(字节数)。
在 start() 调用之前,返回平台默认值。在 setBufferSize() 调用之前,返回通过 setBufferSize 设置的值。在 start() 之后调用,将返回实际使用的缓冲区大小,这可能不是先前通过 setBufferSize 设置的值。
qsizetype QAudioSource::bytesAvailable() const
返回可读取的字节数量。
注意:返回的值仅在 QtAudio::ActiveState 或 QtAudio::IdleState 状态下有效,否则返回零。
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()
在挂起后恢复处理音频数据。
将 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
(全音量)线性缩放。超出此范围的值将被限制。
如果设备不支持调整输入音量,则音量将被忽略,输入音量将保持在1.0。
默认音量为1.0
。
注意:调整音量将改变此音频流的音量,而不是全局音量。
另请参阅音量。
void QAudioSource::start(QIODevice *device)
从系统的音频输入开始传输音频数据到设备。该设备必须在WriteOnly、Append或ReadWrite模式中已打开。
如果QAudioSource能够成功获取音频数据,state()返回QtAudio::ActiveState或QtAudio::IdleState,error()返回QtAudio::NoError,并且发出stateChanged()信号。
如果在此过程中发生问题,error()返回QtAudio::OpenError,state()返回QtAudio::StoppedState,并且发出stateChanged()信号。
另请参阅QIODevice。
QIODevice *QAudioSource::start()
返回一个指向用于从系统音频输入传输数据的内部QIODevice的指针。该设备已经打开并且可以直接从中读取数据read()。
注意:在停止流或开始另一个流后,该指针将不再有效。
如果QAudioSource能够访问系统的音频设备,state()返回QtAudio::IdleState,error()返回QtAudio::NoError,并发出stateChanged()信号。
如果在此过程中发生问题,error()返回QtAudio::OpenError,state()返回QtAudio::StoppedState,并且发出stateChanged()信号。
另请参阅QIODevice。
QtAudio::State QAudioSource::state() const
返回音频处理的状态。
[信号]
void QAudioSource::stateChanged(QtAudio::State state)
当设备state发生变化时发出此信号。
注意:直到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().
© 2024 The Qt Company Ltd. 本文档中的贡献内容为各自拥有者的版权。本文档的提供是遵循 GNU Free Documentation License version 1.3 的条款,由 Free Software Foundation 发布。Qt 和相关标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为各自拥有者的财产。