Класс QAudioInput
Класс QAudioInput предоставляет интерфейс для получения аудиоданных с устройства аудиовхода. Подробнее...
| Заголовок: | #include <QAudioInput> |
| qmake: | QT += multimedia |
| Наследуется от: | QObject |
Открытые функции
| QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
| QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
| virtual | ~QAudioInput() |
| int | bufferSize() const |
| int | bytesReady() 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 | 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) |
Подробное описание
Можно создать аудиовход с помощью по умолчанию аудио устройства ввода системы. Также можно создать QAudioInput со специфическим QAudioDeviceInfo. При создании аудиовхода необходимо также указать QAudioFormat, который будет использоваться для записи (см. описание класса QAudioFormat для деталей).
Для записи в файл:
QAudioInput позволяет записывать аудио с помощью устройства аудиовхода. Конструктор по умолчанию этого класса будет использовать по умолчанию аудио устройство системы, но вы также можете указать QAudioDeviceInfo для конкретного устройства. Вам также нужно передать QAudioFormat, в котором вы хотите записать.
Запуск QAudioInput сводится к вызову start() с QIODevice, открытым для записи. Например, для записи в файл, вы можете:
QFile destinationFile; // Class member
QAudioInput* 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.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
if (!info.isFormatSupported(format)) {
qWarning() << "Default format not supported, trying to use the nearest.";
format = info.nearestFormat(format);
}
audio = new QAudioInput(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
} Это запустит запись, если указанный формат поддерживается устройством ввода (вы можете проверить это с помощью QAudioDeviceInfo::isFormatSupported(). В случае возникновения проблем, используйте функцию error() для проверки того, что пошло не так. Мы останавливаем запись в слоте stopRecording().
void AudioInputExample::stopRecording()
{
audio->stop();
destinationFile.close();
delete audio;
} В любой момент QAudioInput будет находиться в одном из четырех состояний: активном, приостановленном, остановленном или в режиме ожидания. Эти состояния задаются перечислением QAudio::State. Вы можете непосредственно запросить изменение состояния с помощью suspend(), resume(), stop(), reset() и start(). Текущее состояние сообщается функцией state(). QAudioOutput также сообщит вам об изменении состояния (stateChanged()).
QAudioInput предоставляет несколько способов измерения времени, прошедшего с момента вызова start() записи. Функция processedUSecs() возвращает длину записанного потока в микросекундах, т. е. она исключает время, когда аудиовход был приостановлен или находился в состоянии ожидания. Функция elapsedUSecs() возвращает время, прошедшее с момента вызова start(), независимо от состояния QAudioInput.
Если произойдет ошибка, вы можете получить её причину с помощью error(). Возможные причины ошибок описаны в перечислении QAudio::Error. QAudioInput перейдет в состояние 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;
}
} См. также QAudioOutput и QAudioDeviceInfo.
Документация по функциям-членам
QAudioInput::QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создает новый аудиовход и привязывает его к parent. Устройство, на которое ссылается audioDevice, используется с параметрами ввода format.
QAudioInput::QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Создает новый аудиовход и привязывает его к parent. Используется аудиоустройство ввода по умолчанию с параметрами вывода format.
[signal] void QAudioInput::notify()
Этот сигнал испускается, когда x мс аудиоданных были обработаны в интервале, заданном setNotifyInterval(x).
[signal] void QAudioInput::stateChanged(QAudio::State state)
Этот сигнал испускается, когда состояние устройства изменилось на state.
[virtual] QAudioInput::~QAudioInput()
Уничтожает этот аудиовход.
int QAudioInput::bufferSize() const
Возвращает размер буфера аудио в байтах.
Если вызвано до start(), возвращает значение по умолчанию платформы. Если вызвано до start(), но setBufferSize() было вызвано ранее, возвращает значение, установленное setBufferSize(). Если вызвано после start(), возвращает фактический используемый размер буфера. Это может отличаться от ранее заданного значения setBufferSize().
См. также setBufferSize().
int QAudioInput::bytesReady() const
Возвращает количество доступных для чтения аудиоданных в байтах.
Примечание: возвращаемое значение допустимо только в состоянии QAudio::ActiveState или QAudio::IdleState, в противном случае возвращает ноль.
qint64 QAudioInput::elapsedUSecs() const
Возвращает микросекунды, прошедшие с момента вызова start(), включая время в состояниях Ожидание и Приостановка.
QAudio::Error QAudioInput::error() const
Возвращает состояние ошибки.
QAudioFormat QAudioInput::format() const
Возвращает используемый QAudioFormat.
int QAudioInput::notifyInterval() const
Возвращает интервал уведомления в миллисекундах.
См. также setNotifyInterval().
int QAudioInput::periodSize() const
Возвращает размер периода в байтах.
Примечание: Это рекомендуемый размер чтения в байтах.
qint64 QAudioInput::processedUSecs() const
Возвращает количество обработанных данных аудио с момента вызова start() в микросекундах.
void QAudioInput::reset()
Удаляет все данные аудио в буферах, сбрасывает буферы в ноль.
void QAudioInput::resume()
Возобновляет обработку данных аудио после suspend().
Устанавливает error() в QAudio::NoError. Устанавливает state() в QAudio::ActiveState, если вы ранее вызвали start(QIODevice*). Устанавливает state() в QAudio::IdleState, если вы ранее вызвали start(). Исключение stateChanged() сигнала.
void QAudioInput::setBufferSize(int value)
Устанавливает размер буфера аудио в value байт.
Примечание: Этот метод можно вызывать в любое время до start(), вызовы этого метода игнорируются после start(). Не следует предполагать, что установленный размер буфера является фактическим размером буфера, вызов bufferSize() в любое время после start() вернёт фактический используемый размер буфера.
См. также bufferSize().
void QAudioInput::setNotifyInterval(int ms)
Устанавливает интервал для излучения сигнала notify(). Это основано на ms обработанных данных аудио, а не на реальном времени. Минимальное разрешение таймера зависит от платформы, и значения следует проверять с помощью notifyInterval() для подтверждения фактически используемого значения.
См. также notifyInterval().
void QAudioInput::setVolume(qreal volume)
Устанавливает громкость ввода в volume.
Громкость масштабируется линейно от 0.0 (тишина) до 1.0 (полная громкость). Значения вне этого диапазона будут ограничены.
Если устройство не поддерживает регулировку громкости ввода, то volume будет проигнорировано, а громкость ввода останется равной 1.0.
Значение по умолчанию для громкости равно 1.0.
Примечание: Регулировки громкости изменят громкость этого потока аудио, а не глобальную громкость.
См. также volume().
void QAudioInput::start(QIODevice *device)
Начинает передачу данных аудио из системного аудиоввода в device. device должен быть открыт в режимах WriteOnly, Append или ReadWrite.
Если QAudioInput может успешно получить данные аудио, state() возвращает либо QAudio::ActiveState, либо QAudio::IdleState, error() возвращает QAudio::NoError, и излучается сигнал stateChanged().
Если при этом процессе возникнет проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и излучается сигнал stateChanged().
См. также QIODevice.
QIODevice *QAudioInput::start()
Возвращает указатель на внутренний QIODevice, используемый для передачи данных из системного аудиоввода. Устройство уже будет открыто, и read() может напрямую считывать данные из него.
Примечание: Указатель станет недоступным после остановки потока или если вы запустите другой поток.
Если QAudioInput может получить доступ к системному аудиоустройству, state() возвращает QAudio::IdleState, error() возвращает QAudio::NoError, и излучается сигнал stateChanged().
Если при этом процессе возникнет проблема, error() возвращает QAudio::OpenError, state() возвращает QAudio::StoppedState, и излучается сигнал stateChanged().
См. также QIODevice.
QAudio::State QAudioInput::state() const
Возвращает состояние обработки аудио.
void QAudioInput::stop()
Останавливает аудиоввод, отсоединяясь от системного ресурса.
Устанавливает error() в QAudio::NoError, state() в QAudio::StoppedState и излучает сигнал stateChanged().
void QAudioInput::suspend()
Останавливает обработку данных аудио, сохраняя буферизованные данные аудио.
Устанавливает error() в QAudio::NoError, state() в QAudio::SuspendedState и излучает сигнал stateChanged().
qreal QAudioInput::volume() const
Возвращает громкость ввода.
Если устройство не поддерживает регулировку громкости ввода, возвращаемое значение будет 1.0.
См. также setVolume().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qaudioinput.html