Класс QAudioOutput
Класс QAudioOutput предоставляет интерфейс для отправки аудиоданных на устройство вывода звука. Подробнее...
| Заголовок: | #include <QAudioOutput> |
| qmake: | QT += multimedia |
| Наследует: | QObject |
Открытые функции
| QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
| QAudioOutput(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 |
Сигналы
| void | notify() |
| void | stateChanged(QAudio::State state) |
Подробное описание
Можно создать выходной аудиопоток с использованием системного устройства вывода звука по умолчанию. Также возможно создать 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 находится в состоянии SuspendedState или IdleState, сигнал 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 QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создаёт новый аудиовыход и присоединяет его к parent. Устройство, на которое ссылается audioDevice, используется с параметрами вывода format.
QAudioOutput::QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создаёт новый аудиовыход и присоединяет его к parent. Используется устройство вывода звука по умолчанию с параметрами вывода format.
[signal] void QAudioOutput::notify()
Этот сигнал подаётся, когда определённый интервал миллисекунд аудиоданных был обработан. Интервал устанавливается с помощью setNotifyInterval().
[signal] void QAudioOutput::stateChanged(QAudio::State state)
Этот сигнал подаётся, когда состояние устройства state изменилось. Это текущее состояние аудиовыхода.
[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.
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
Возвращает состояние обработки аудио.
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/qt-5.14/qaudiooutput.html