QAudioSource 类

QAudioSource 类提供了一个 用于从音频输入设备接收音频数据的接口。 更多...

头文件 #include <QAudioSource>
CMakefind_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmakeQT += multimedia
继承 QObject

公共函数

QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual~QAudioSource()
qsizetypebufferSize() const
qsizetypebytesAvailable() const
qint64elapsedUSecs() const
QtAudio::Errorerror() const
QAudioFormatformat() const
boolisNull() const
qint64processedUSecs() const
voidreset()
voidresume()
voidsetBufferSize(qsizetype value)
voidsetVolume(qreal volume)
voidstart(QIODevice *device)
QIODevice *start()
QtAudio::Statestate() const
voidstop()
voidsuspend()
qrealvolume() const

信号

voidstateChanged(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 枚举指定。您可以通过 suspendresumestopresetstart 直接请求状态更改。当前状态由 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;
    }
}

另请参阅 QAudioSinkQAudioDevice

成员函数文档

[显式构造函数] 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 设置的值。

参阅setBufferSize

qsizetype QAudioSource::bytesAvailable() const

返回可读取的字节数量。

注意:返回的值仅在 QtAudio::ActiveStateQtAudio::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)

从系统的音频输入开始传输音频数据到设备。该设备必须在WriteOnlyAppendReadWrite模式中已打开。

如果QAudioSource能够成功获取音频数据,state()返回QtAudio::ActiveStateQtAudio::IdleStateerror()返回QtAudio::NoError,并且发出stateChanged()信号。

如果在此过程中发生问题,error()返回QtAudio::OpenErrorstate()返回QtAudio::StoppedState,并且发出stateChanged()信号。

另请参阅QIODevice

QIODevice *QAudioSource::start()

返回一个指向用于从系统音频输入传输数据的内部QIODevice的指针。该设备已经打开并且可以直接从中读取数据read()。

注意:在停止流或开始另一个流后,该指针将不再有效。

如果QAudioSource能够访问系统的音频设备,state()返回QtAudio::IdleStateerror()返回QtAudio::NoError,并发出stateChanged()信号。

如果在此过程中发生问题,error()返回QtAudio::OpenErrorstate()返回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::NoErrorstate()设置为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. 在芬兰和/或其他国家的商标。所有其他商标均为各自拥有者的财产。