Qt вход аудио измерения - PullRequest
0 голосов
/ 22 марта 2020

Я хочу измерить уровень громкости на входе в пике, децибелах или других вещах. Я просто хочу измерить его и определить громкость. У меня есть этот код, но он не определяет постоянно. Он просто определяет уровень в начале и после уровень начинает снижаться. Связанные части файла заголовка:

  Q_INVOKABLE void start();
  Q_INVOKABLE void stop();
  std::shared_ptr<QAudioInput> source;
  QIODevice *device;
  QAudioFormat format;
  int peak = 0, n;
  int16_t v;

Файл C ++:

#include "Bot.h"

void Bot::start() {
  format.setByteOrder(QAudioFormat::LittleEndian);
  format.setChannelCount(2);
  format.setCodec("audio/pcm");
  format.setSampleRate(8000);
  format.setSampleSize(16);
  format.setSampleType(QAudioFormat::SignedInt);
  source = std::shared_ptr<QAudioInput>(new QAudioInput(format));
  device = source->start();
  connect(device, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
}

void Bot::stop() {
  source = nullptr;
  device = nullptr;
  peak = 0;
  emit volumeChanged(peak);
}

void Bot::onReadyRead() {
  peak = 0;
  n = source->bytesReady();
  n /= 2;
  if (n >= 80) {
    for (int i = 0; i < n; i++) {
      v = 0;
      device->read((char *)&v, 2);
      if (v < 0) {
        v = -v;
      }
      if (peak < v) {
        peak = v;
      }
    }
    peak = peak * 100 / 32768;
    if (peak < 0) {
      peak = 0;
    }
    emit volumeChanged(peak);
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...