Spec-Zone.ru › Qt

Класс QAudioSink

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

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

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

QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual ~QAudioSink()
qsizetype bufferSize() const
qsizetype bytesFree() 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)

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

Вы можете создать аудиовывод с помощью стандартного устройства аудиовывода системы. Также можно создать QAudioSink со специфическим QAudioDevice. При создании аудиовывода вы также должны указать QAudioFormat, который будет использоваться для воспроизведения (см. описание класса QAudioFormat для получения подробностей).

Для воспроизведения файла:

Запуск воспроизведения аудиопотока сводится к вызову start() с QIODevice. QAudioSink затем извлечёт необходимые данные из устройства ввода/вывода. Таким образом, воспроизведение аудиофайла так же просто, как:

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(QAudioDevice::defaultOutputDevice());
    if (!info.isFormatSupported(format)) {
        qWarning() << "Raw audio format not supported by backend, cannot play audio.";
        return;
    }

    audio = new QAudioSink(format, this);
    connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
    audio->start(&sourceFile);
}

Файл начнёт воспроизводиться, предполагая, что аудиосистема и устройство вывода поддерживают это. Если у вас возникнут проблемы, проверьте функцию error().

После завершения воспроизведения файла необходимо остановить устройство:

void AudioOutputExample::handleStateChanged(QAudio::State newState)
{
    switch (newState) {
        case QAudio::IdleState:
            // Finished playing (no more data)
            audio->stop();
            sourceFile.close();
            delete audio;
            break;

        case QAudio::StoppedState:
            // Stopped for other reasons
            if (audio->error() != QAudio::NoError) {
                // Error handling
            }
            break;

        default:
            // ... other cases as appropriate
            break;
    }
}

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

Если возникает ошибка, вы можете получить тип ошибки с помощью функции error(). Обратитесь к перечислению QAudio::Error для описания возможных ошибок, которые сообщаются. При возникновении ошибки состояние изменяется на QAudio::StoppedState. Вы можете проверить наличие ошибок, подключившись к сигналу stateChanged() :

void AudioOutputExample::handleStateChanged(QAudio::State newState)
{
    switch (newState) {
        case QAudio::IdleState:
            // Finished playing (no more data)
            audio->stop();
            sourceFile.close();
            delete audio;
            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 QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

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

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

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

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

Этот сигнал генерируется, когда состояние устройства state изменилось. Это текущее состояние аудиовывода.

[virtual] QAudioSink::~QAudioSink()

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

Это высвободит все системные ресурсы, используемые, и освободит все буферы.

qsizetype QAudioSink::bufferSize() const

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

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

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

qsizetype QAudioSink::bytesFree() const

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

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

qint64 QAudioSink::elapsedUSecs() const

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

QAudio::Error QAudioSink::error() const

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

QAudioFormat QAudioSink::format() const

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

qint64 QAudioSink::processedUSecs() const

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

void QAudioSink::reset()

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

void QAudioSink::resume()

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

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

void QAudioSink::setBufferSize(qsizetype значение)

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

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

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

void QAudioSink::setVolume(qreal громкость)

Устанавливает громкость вывода на громкость.

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

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

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

Управляющие элементы громкости в пользовательском интерфейсе обычно должны масштабироваться нелинейно. Например, использование логарифмического масштаба обеспечит линейные изменения в восприятии громкости, что обычно ожидается от регулятора громкости. См. QAudio::convertVolume() для получения дополнительной информации.

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

void QAudioSink::start(QIODevice *устройство)

Начинает передачу данных аудио из устройства на аудиовыход системы. Устройство должно быть открыто в режимах ReadOnly или ReadWrite.

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

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

См. также QIODevice.

QIODevice *QAudioSink::start()

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

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

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

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

См. также QIODevice.

QAudio::State QAudioSink::state() const

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

void QAudioSink::stop()

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

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

void QAudioSink::suspend()

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

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

qreal QAudioSink::volume() const

Возвращает громкость в диапазоне от 0.0 до 1.0 включительно.

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

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

Spec-Zone.ru

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