Класс 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 |
- 31 открытых функций унаследованных от QObject
Сигналы
| void | notify() |
| void | stateChanged(QAudio::State state) |
- 2 сигнала унаследованных от QObject
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 9 статических открытых членов унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство унаследованное от QObject
- 1 открытый слот унаследованный от 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() не испускается. Типичный сценарий использования — обновление ползунка slider, который позволяет искать в потоке. Если вам нужно время, прошедшее с начала воспроизведения, независимо от состояния аудиовывода, функцией для вас является 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/qt-5.12/qaudiooutput.html