Класс 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(), включая время в состояниях Idle и Suspend.
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.15/qaudioinput.html