Как найти максимальный уровень громкости файла WAV с помощью C ++ - PullRequest
2 голосов
/ 22 ноября 2011

Я хочу получить значение максимального уровня громкости WAV-файла с помощью C ++ (библиотека libsndfile)? Любые предложения о том, как это сделать?

1 Ответ

6 голосов
/ 22 ноября 2011

Вы можете просто найти самое высокое значение отдельной выборки (Пик) среди абсолютных значений выборок в буфере (-ах) выборок.Это принимает форму 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));
}

Среднеквадратичные вычисления ближе к человеческому восприятию, чем Пик.

Чтобы углубиться в человеческое восприятие, вы можете использовать Весовые фильтры .

...