Вы можете просто найти самое высокое значение отдельной выборки (Пик) среди абсолютных значений выборок в буфере (-ах) выборок.Это принимает форму general :
t_sample PeakAmplitude(const t_sample* const buffer, const size_t& count) {
t_sample highest(0);
for (size_t idx(0); idx < count; ++idx) {
// or fabs if fp
highest = std::max(highest, abs(buffer[idx]));
}
return highest;
}
. Для получения средних значений вы можете использовать функции RMS.Иллюстрация:
t_sample RMSAmplitude(const t_sample* const buffer, const size_t& count) {
t_sample s2(0);
for (size_t idx(0); idx < count; ++idx) {
// mind your sample types and ranges
s2 += buffer[idx] * buffer[idx];
}
return sqrt(s2 / static_cast<double>(count));
}
Среднеквадратичные вычисления ближе к человеческому восприятию, чем Пик.
Чтобы углубиться в человеческое восприятие, вы можете использовать Весовые фильтры .