Класс QAudioSource
Класс QAudioSource предоставляет интерфейс для получения аудиоданных от устройства аудиоввода. Подробнее...
| Заголовок: | #include <QAudioSource> |
| CMake: | find_package(Qt6 COMPONENTS Multimedia REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
| qmake: | QT += multimedia |
| Наследуется от: | QObject |
Открытые функции
| QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
| QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
| virtual | ~QAudioSource() |
| qsizetype | bufferSize() const |
| qsizetype | bytesAvailable() const |
| qint64 | elapsedUSecs() const |
| QAudio::Error | error() const |
| QAudioFormat | format() const |
| qint64 | processedUSecs() const |
| void | reset() |
| void | resume() |
| void | setBufferSize(qsizetype value) |
| void | setVolume(qreal volume) |
| void | start(QIODevice *device) |
| QIODevice * | start() |
| QAudio::State | state() const |
| void | stop() |
| void | suspend() |
| qreal | volume() const |
Сигналы
| void | stateChanged(QAudio::State state) |
Подробное описание
Можно создать аудиовход с использованием стандартного устройства аудиоввода системы. Также возможно создать QAudioSource со специфическим устройством QAudioDevice. При создании аудиовхода необходимо также указать QAudioFormat, который будет использоваться для записи (см. описание класса QAudioFormat для получения подробностей).
Для записи в файл:
QAudioSource позволяет записывать аудио с устройства аудиоввода. Конструктор по умолчанию этого класса будет использовать стандартное устройство аудиоввода системы, но вы также можете указать QAudioDevice для конкретного устройства. Вам также нужно передать QAudioFormat в том формате, в котором вы хотите записать.
Запуск QAudioSource сводится к вызову start() с QIODevice, открытым для записи. Например, для записи в файл можно:
QFile destinationFile; // Class member
QAudioSource* audio; // Class member
{
destinationFile.setFileName("/tmp/test.raw");
destinationFile.open( QIODevice::WriteOnly | QIODevice::Truncate );
QAudioFormat format;
// Set up the desired format, for example:
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleFormat(QAudioFormat::UInt8);
QAudioDevice info = QMediaDevices::defaultAudioInput();
if (!info.isFormatSupported(format)) {
qWarning() << "Default format not supported, trying to use the nearest.";
}
audio = new QAudioSource(format, this);
connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
QTimer::singleShot(3000, this, SLOT(stopRecording()));
audio->start(&destinationFile);
// Records audio for 3000ms
} Это запустит запись, если указанный формат поддерживается устройством ввода (это можно проверить с помощью QAudioDevice::isFormatSupported(). В случае возникновения проблем используйте функцию error() для проверки возникшей ошибки. Мы останавливаем запись в слоте stopRecording().
void AudioInputExample::stopRecording()
{
audio->stop();
destinationFile.close();
delete audio;
} В любой момент времени QAudioSource будет находиться в одном из четырёх состояний: активном, приостановленном, остановленном или неактивном. Эти состояния задаются перечислением QAudio::State. Вы можете напрямую запросить изменение состояния с помощью suspend(), resume(), stop(), reset() и start(). Текущее состояние сообщается функцией state(). QAudioSink также будет сигнализировать вам при изменении состояния (stateChanged()).
QAudioSource предоставляет несколько способов измерения времени, прошедшего с момента вызова start() записи. Функция processedUSecs() возвращает длину записанного потока в микросекундах, то есть она исключает время, когда аудиовход был приостановлен или неактивен. Функция elapsedUSecs() возвращает время, прошедшее с момента вызова start(), независимо от того, в каких состояниях находился QAudioSource.
Если произошла ошибка, вы можете получить её причину с помощью error(). Возможные причины ошибок описаны в перечислении QAudio::Error. QAudioSource перейдёт в состояние StoppedState при возникновении ошибки. Подключитесь к сигналу stateChanged() для обработки ошибки:
void AudioInputExample::handleStateChanged(QAudio::State newState)
{
switch (newState) {
case QAudio::StoppedState:
if (audio->error() != QAudio::NoError) {
// Error handling
} else {
// Finished recording
}
break;
case QAudio::ActiveState:
// Started recording - read from IO device
break;
default:
// ... other cases as appropriate
break;
}
} См. также QAudioSink и QAudioDevice.
Документация по функциям-членам
QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создаёт новый аудиовход и присоединяет его к parent. Используется устройство, на которое ссылается audioDevice, с параметрами ввода format.
QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создаёт новый аудиовход и присоединяет его к parent. Используется стандартное устройство аудиоввода с параметрами вывода format.
[signal] void QAudioSource::stateChanged(QAudio::State state)
Этот сигнал генерируется при изменении состояния устройства state.
[virtual] QAudioSource::~QAudioSource()
Уничтожает этот аудиовход.
qsizetype QAudioSource::bufferSize() const
Возвращает размер буфера аудио в байтах.
Если вызывается до start(), возвращает значение платформенного по умолчанию. Если вызывается до start(), но setBufferSize() был вызван ранее, возвращает значение, установленное setBufferSize(). Если вызывается после start(), возвращает фактический используемый размер буфера. Это может отличаться от того, что было установлено ранее с помощью setBufferSize().
См. также setBufferSize().
qsizetype QAudioSource::bytesAvailable() const
Возвращает количество доступных для чтения данных аудио в байтах.
Примечание: возвращаемое значение является допустимым только во время состояния QAudio::ActiveState или QAudio::IdleState, в противном случае возвращает ноль.
qint64 QAudioSource::elapsedUSecs() const
Возвращает микросекунды, прошедшие с момента вызова start(), включая время в состояниях Idle и Suspend.
QAudio::Error QAudioSource::error() const
Возвращает состояние ошибки.
QAudioFormat QAudioSource::format() const
Возвращает используемый QAudioFormat.
qint64 QAudioSource::processedUSecs() const
Возвращает количество обработанных данных аудио с момента вызова start() в микросекундах.
void QAudioSource::reset()
Удаляет все данные аудио в буферах, сбрасывает буферы в ноль.
void QAudioSource::resume()
Возобновляет обработку аудиоданных после приостановки.
Устанавливает error() в QAudio::NoError. Устанавливает state() в QAudio::ActiveState, если вы ранее вызывали start(QIODevice*). Устанавливает state() в QAudio::IdleState, если вы ранее вызывали start(). Издаёт сигнал stateChanged().
void QAudioSource::setBufferSize(qsizetype value)
Устанавливает размер буфера аудиоданных в value байт.
Примечание: Эта функция может быть вызвана в любое время до start(), вызовы после start() игнорируются. Не следует предполагать, что установленный размер буфера является фактическим размером буфера, используемого при вызове bufferSize() после start() будет возвращён фактический используемый размер буфера.
См. также bufferSize().
void QAudioSource::setVolume(qreal volume)
Устанавливает входной уровень громкости до volume.
Громкость масштабируется линейно от 0.0 (тишина) до 1.0 (полная громкость). Значения вне этого диапазона будут ограничены.
Если устройство не поддерживает регулировку входной громкости, то volume будет проигнорировано, и входная громкость останется на уровне 1.0.
Значение громкости по умолчанию — 1.0.
Примечание: Регулировка громкости изменит громкость этого аудиопотока, а не глобальную громкость.
См. также volume().
void QAudioSource::start(QIODevice *device)
Начинает передачу аудиоданных от системного аудиовхода в устройство device. Устройство device должно быть открыто в режиме WriteOnly, Append или ReadWrite.
Если QAudioSource успешно получает аудиоданные, state() возвращает либо QAudio::ActiveState, либо QAudio::IdleState, error() возвращает QAudio::NoError, и издаётся сигнал stateChanged().
Если при этом возникает проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и издаётся сигнал stateChanged().
См. также QIODevice.
QIODevice *QAudioSource::start()
Возвращает указатель на внутреннее устройство QIODevice, используемое для передачи данных с системного аудиовхода. Устройство уже открыто, и read() может считывать данные напрямую из него.
Примечание: Указатель станет недействительным после остановки потока или если вы запустите другой поток.
Если QAudioSource может получить доступ к системному аудиоустройству, state() возвращает QAudio::IdleState, error() возвращает QAudio::NoError, и издаётся сигнал stateChanged().
Если при этом возникает проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и издаётся сигнал stateChanged().
См. также QIODevice.
QAudio::State QAudioSource::state() const
Возвращает состояние обработки аудиоданных.
void QAudioSource::stop()
Останавливает аудиовход, отсоединяясь от системного ресурса.
Устанавливает error() в QAudio::NoError, state() в QAudio::StoppedState и издаёт сигнал stateChanged().
void QAudioSource::suspend()
Приостанавливает обработку аудиоданных, сохраняя буферизованные аудиоданные.
Устанавливает error() в QAudio::NoError, state() в QAudio::SuspendedState и издаёт сигнал stateChanged().
qreal QAudioSource::volume() const
Возвращает уровень входной громкости.
Если устройство не поддерживает регулировку входной громкости, возвращаемое значение будет 1.0.
См. также setVolume().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qaudiosource.html