Класс 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 |
- 32 открытые функции унаследованные от 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() не генерируется. Типичное применение — обновление ползунка 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 = 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(). Испeкается сигнал 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.9/qaudiooutput.html