Spec-Zone.ru › Qt 5.11

Класс QAudioOutput

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

Заголовок: #include <QAudioOutput>
qmake: QT += multimedia
Наследует: QObject
  • Список всех членов, включая унаследованные

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

QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual ~QAudioOutput()
int bufferSize() const
int bytesFree() const
QString category() const
qint64 elapsedUSecs() const
QAudio::Error error() const
QAudioFormat format() const
int notifyInterval() const
int periodSize() const
qint64 processedUSecs() const
void reset()
void resume()
void setBufferSize(int value)
void setCategory(const QString &category)
void setNotifyInterval(int ms)
void setVolume(qreal volume)
void start(QIODevice *device)
QIODevice * start()
QAudio::State state() const
void stop()
void suspend()
qreal volume() const
  • 34 открытых функций, унаследованных от QObject

Сигналы

void notify()
void stateChanged(QAudio::State state)
  • 2 сигнала, унаследованные от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 1 открытая переменная, унаследованная от QObject
  • 10 статических открытых членов, унаследованных от QObject
  • 9 защищённых функций, унаследованных от QObject
  • 2 защищённых переменных, унаследованных от QObject

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

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

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

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

Запуск потока аудио воспроизведения осуществляется простым вызовом start() с QIODevice. QAudioOutput затем извлекает необходимые данные из устройства ввода-вывода. Поэтому воспроизведение аудиофайла столь же просто, как:

QFile sourceFile;   // class member.
QAudioOutput* 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.setSampleSize(8);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::UnSignedInt);

    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    if (!info.isFormatSupported(format)) {
        qWarning() << "Raw audio format not supported by backend, cannot play audio.";
        return;
    }

    audio = new QAudioOutput(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;
    }
}

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

Во время воспроизведения потока вы можете установить интервал уведомления в миллисекундах с помощью setNotifyInterval(). Этот интервал определяет время между двумя событиями сигнала notify(). Это относительное время к позиции в потоке, т.е., если QAudioOutput находится в состоянии приостановки или неактивности, сигнал notify() не генерируется. Типичным случаем использования будет обновление ползунка qslider, который позволяет искать в потоке. Если вам нужно время, прошедшее с начала воспроизведения, независимо от состояния аудиовывода, функция elapsedUSecs() для вас.

При возникновении ошибки вы можете получить тип ошибки с помощью функции 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;
    }
}

См. также QAudioInput и QAudioDeviceInfo.

Документация по функциям-членам

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

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

QAudioOutput::QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

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

[virtual] QAudioOutput::~QAudioOutput()

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

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

int QAudioOutput::bufferSize() const

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

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

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

int QAudioOutput::bytesFree() const

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

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

QString QAudioOutput::category() const

Возвращает категорию аудиопотока.

Некоторые платформы могут группировать аудиопотоки в категории и управлять их громкостью независимо или отображать их в системном микшере. Вы можете установить эту свойство, чтобы позволить платформе различать назначение ваших потоков.

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

qint64 QAudioOutput::elapsedUSecs() const

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

QAudio::Error QAudioOutput::error() const

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

QAudioFormat QAudioOutput::format() const

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

[signal] void QAudioOutput::notify()

Этот сигнал испускается, когда определённый интервал миллисекунд аудиоданных был обработан. Интервал устанавливается с помощью setNotifyInterval().

int QAudioOutput::notifyInterval() const

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

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

int QAudioOutput::periodSize() const

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

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

qint64 QAudioOutput::processedUSecs() const

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

void QAudioOutput::reset()

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

void QAudioOutput::resume()

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

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

void QAudioOutput::setBufferSize(int value)

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

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

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

void QAudioOutput::setCategory(const QString &category)

Устанавливает категорию аудиопотока на category.

Некоторые платформы могут группировать аудиопотоки в категории и управлять их громкостью независимо или отображать их в системном микшере. Вы можете установить эту свойство, чтобы позволить платформе различать назначение ваших потоков.

Не все платформы поддерживают категоризацию аудиопотоков. В этом случае вызов функции будет проигнорирован.

Изменение категории аудиовыхода во время её работы не повлияет до тех пор, пока она не будет переоткрыта.

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

void QAudioOutput::setNotifyInterval(int ms)

Устанавливает интервал для сигнала notify() для испускания. Это основано на обработанных аудиоданных ms, а не на системном времени. Минимальное разрешение таймера зависит от платформы, и значения следует проверять с помощью notifyInterval(), чтобы подтвердить фактическое используемое значение.

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

void QAudioOutput::setVolume(qreal volume)

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

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

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

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

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

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

void QAudioOutput::start(QIODevice *device)

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

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

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

См. также QIODevice.

QIODevice *QAudioOutput::start()

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

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

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

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

См. также QIODevice.

QAudio::State QAudioOutput::state() const

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

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

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

void QAudioOutput::stop()

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

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

void QAudioOutput::suspend()

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

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

qreal QAudioOutput::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/archives/qt-5.11/qaudiooutput.html

Spec-Zone.ru

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