Spec-Zone.ru › Qt

Класс QAudioSource

Класс QAudioSource предоставляет интерфейс для получения аудиоданных от устройства аудиоввода. Подробнее...

Заголовок: #include <QAudioSource>
CMake: find_package(Qt6 COMPONENTS Multimedia REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Наследуется от: QObject
  • Список всех членов, включая наследуемые

Открытые функции

QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual ~QAudioSource()
qsizetype bufferSize() const
qsizetype bytesAvailable() const
qint64 elapsedUSecs() const
QAudio::Error error() const
QAudioFormat format() const
qint64 processedUSecs() const
void reset()
void resume()
void setBufferSize(qsizetype value)
void setVolume(qreal volume)
void start(QIODevice *device)
QIODevice * start()
QAudio::State state() const
void stop()
void suspend()
qreal volume() const

Сигналы

void stateChanged(QAudio::State state)

Подробное описание

Можно создать аудиовход с использованием стандартного устройства аудиоввода системы. Также возможно создать QAudioSource со специфическим устройством QAudioDevice. При создании аудиовхода необходимо также указать 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, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));

    QTimer::singleShot(3000, this, SLOT(stopRecording()));
    audio->start(&destinationFile);
    // Records audio for 3000ms
}

Это запустит запись, если указанный формат поддерживается устройством ввода (это можно проверить с помощью QAudioDevice::isFormatSupported(). В случае возникновения проблем используйте функцию error() для проверки возникшей ошибки. Мы останавливаем запись в слоте stopRecording().

void AudioInputExample::stopRecording()
{
    audio->stop();
    destinationFile.close();
    delete audio;
}

В любой момент времени QAudioSource будет находиться в одном из четырёх состояний: активном, приостановленном, остановленном или неактивном. Эти состояния задаются перечислением QAudio::State. Вы можете напрямую запросить изменение состояния с помощью suspend(), resume(), stop(), reset() и start(). Текущее состояние сообщается функцией state(). QAudioSink также будет сигнализировать вам при изменении состояния (stateChanged()).

QAudioSource предоставляет несколько способов измерения времени, прошедшего с момента вызова start() записи. Функция processedUSecs() возвращает длину записанного потока в микросекундах, то есть она исключает время, когда аудиовход был приостановлен или неактивен. Функция elapsedUSecs() возвращает время, прошедшее с момента вызова start(), независимо от того, в каких состояниях находился QAudioSource.

Если произошла ошибка, вы можете получить её причину с помощью error(). Возможные причины ошибок описаны в перечислении QAudio::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 QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

Создаёт новый аудиовход и присоединяет его к parent. Используется устройство, на которое ссылается audioDevice, с параметрами ввода format.

QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

Создаёт новый аудиовход и присоединяет его к parent. Используется стандартное устройство аудиоввода с параметрами вывода format.

[signal] void QAudioSource::stateChanged(QAudio::State state)

Этот сигнал генерируется при изменении состояния устройства state.

[virtual] QAudioSource::~QAudioSource()

Уничтожает этот аудиовход.

qsizetype QAudioSource::bufferSize() const

Возвращает размер буфера аудио в байтах.

Если вызывается до start(), возвращает значение платформенного по умолчанию. Если вызывается до start(), но setBufferSize() был вызван ранее, возвращает значение, установленное setBufferSize(). Если вызывается после start(), возвращает фактический используемый размер буфера. Это может отличаться от того, что было установлено ранее с помощью setBufferSize().

См. также setBufferSize().

qsizetype QAudioSource::bytesAvailable() const

Возвращает количество доступных для чтения данных аудио в байтах.

Примечание: возвращаемое значение является допустимым только во время состояния QAudio::ActiveState или QAudio::IdleState, в противном случае возвращает ноль.

qint64 QAudioSource::elapsedUSecs() const

Возвращает микросекунды, прошедшие с момента вызова start(), включая время в состояниях Idle и Suspend.

QAudio::Error QAudioSource::error() const

Возвращает состояние ошибки.

QAudioFormat QAudioSource::format() const

Возвращает используемый QAudioFormat.

qint64 QAudioSource::processedUSecs() const

Возвращает количество обработанных данных аудио с момента вызова start() в микросекундах.

void QAudioSource::reset()

Удаляет все данные аудио в буферах, сбрасывает буферы в ноль.

void QAudioSource::resume()

Возобновляет обработку аудиоданных после приостановки.

Устанавливает error() в QAudio::NoError. Устанавливает state() в QAudio::ActiveState, если вы ранее вызывали start(QIODevice*). Устанавливает state() в QAudio::IdleState, если вы ранее вызывали start(). Издаёт сигнал stateChanged().

void QAudioSource::setBufferSize(qsizetype value)

Устанавливает размер буфера аудиоданных в value байт.

Примечание: Эта функция может быть вызвана в любое время до start(), вызовы после start() игнорируются. Не следует предполагать, что установленный размер буфера является фактическим размером буфера, используемого при вызове bufferSize() после start() будет возвращён фактический используемый размер буфера.

См. также bufferSize().

void QAudioSource::setVolume(qreal volume)

Устанавливает входной уровень громкости до volume.

Громкость масштабируется линейно от 0.0 (тишина) до 1.0 (полная громкость). Значения вне этого диапазона будут ограничены.

Если устройство не поддерживает регулировку входной громкости, то volume будет проигнорировано, и входная громкость останется на уровне 1.0.

Значение громкости по умолчанию — 1.0.

Примечание: Регулировка громкости изменит громкость этого аудиопотока, а не глобальную громкость.

См. также volume().

void QAudioSource::start(QIODevice *device)

Начинает передачу аудиоданных от системного аудиовхода в устройство device. Устройство device должно быть открыто в режиме WriteOnly, Append или ReadWrite.

Если QAudioSource успешно получает аудиоданные, state() возвращает либо QAudio::ActiveState, либо QAudio::IdleState, error() возвращает QAudio::NoError, и издаётся сигнал stateChanged().

Если при этом возникает проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и издаётся сигнал stateChanged().

См. также QIODevice.

QIODevice *QAudioSource::start()

Возвращает указатель на внутреннее устройство QIODevice, используемое для передачи данных с системного аудиовхода. Устройство уже открыто, и read() может считывать данные напрямую из него.

Примечание: Указатель станет недействительным после остановки потока или если вы запустите другой поток.

Если QAudioSource может получить доступ к системному аудиоустройству, state() возвращает QAudio::IdleState, error() возвращает QAudio::NoError, и издаётся сигнал stateChanged().

Если при этом возникает проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и издаётся сигнал stateChanged().

См. также QIODevice.

QAudio::State QAudioSource::state() const

Возвращает состояние обработки аудиоданных.

void QAudioSource::stop()

Останавливает аудиовход, отсоединяясь от системного ресурса.

Устанавливает error() в QAudio::NoError, state() в QAudio::StoppedState и издаёт сигнал stateChanged().

void QAudioSource::suspend()

Приостанавливает обработку аудиоданных, сохраняя буферизованные аудиоданные.

Устанавливает error() в QAudio::NoError, state() в QAudio::SuspendedState и издаёт сигнал stateChanged().

qreal QAudioSource::volume() const

Возвращает уровень входной громкости.

Если устройство не поддерживает регулировку входной громкости, возвращаемое значение будет 1.0.

См. также setVolume().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qaudiosource.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API