Я хочу измерить уровень громкости на входе в пике, децибелах или других вещах. Я просто хочу измерить его и определить громкость. У меня есть этот код, но он не определяет постоянно. Он просто определяет уровень в начале и после уровень начинает снижаться. Связанные части файла заголовка:
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);
}
}