Я пытаюсь вычислить громкость звуковой дорожки, которую я сохранил в буфере. Буфер содержит данные PCM о сигнале, и я хочу узнать, насколько он «громкий», используя Root Mean Squared. Я предполагаю, что могу сделать это во временной области вместо того, чтобы переключаться в частотную область. Каким будет псевдокод для этого?
Буду ли я просто производить выборку в течение одной секунды (аудио [0] - аудио [44099], аудио [44099] - аудио [88199] и т. Д.) И вычислять среднеквадратичное значение этих значений? Так, например, я бы сделал это:
за каждую секунду?
<!-- html comment -->
чтобы обойти ограничение символов в редком случае, когда в идеальном посте есть крошечная, но очень важная ошибка. Эта необходимость возникает очень редко: обычно требуется сделать более 6 символов улучшения. Например, когда отсутствуют скобки, то, как правило , лучше использовать\sqrt{}
и\frac{}{}
конструкцию в TeX.Ответы:
Другое дело, что значение RMS не очень хорошо коррелирует с воспринимаемой громкостью. Возможно, вы захотите назвать это уровнем или громкостью. Существует нечто, называемое равными контурами громкости, которое количественно определяет, насколько чувствительно ухо к одной частоте по сравнению с другой частотой, см. Статью в Википедии . Эти кривые зависят от уровня. Например, ухо очень чувствительно к тону 1 кГц по сравнению с тоном 100 Гц, как показано на этом изображении (горизонтальная ось - это частота в Гц):
Одна из относительно простых вещей, которые вы можете сделать, - это отфильтровать данные PCM с помощью инвертированной кривой равной громкости. Или вы можете применить стандартное взвешивание A, см. Статью Wikipedia Weighting Filter . Затем вы можете вычислить среднеквадратичное значение выходного сигнала взвешенного фильтра равной громкости.
источник