Класс QAudioOutput
Класс QAudioOutput предоставляет интерфейс для отправки аудиоданных на устройство аудиовывода. Подробнее...
| Заголовок: | #include <QAudioOutput> |
| qmake: | QT += multimedia |
| Наследуется от: | QObject |
Открытые функции
| QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR) | |
| QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR) | |
| ~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 |
- 31 открытых функций, унаследованных от QObject
Сигналы
| void | notify() |
| void | stateChanged(QAudio::State state) |
- 2 сигнала, унаследованные от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 11 статических открытых членов, унаследованных от QObject
- 9 защищённых функций, унаследованных от 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 = Q_NULLPTR)
Создаёт новый аудиовыход и прикрепляет его к parent. Используется стандартное устройство аудиовывода с параметрами формата format.
QAudioOutput::QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = Q_NULLPTR)
Создаёт новый аудиовыход и прикрепляет его к parent. Используется устройство, указанное в audioDevice, с параметрами формата format.
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 включительно. Примечание: изменения громкости изменят громкость этого аудиопотока, а не глобальную громкость.
См. также 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.6/qaudiooutput.html