Как я могу определить, насколько громко будет звучать WAV файл?

У меня есть куча разных аудиозаписей в формате WAV (все разные инструменты и смолы), и я хочу их "нормализовать", чтобы они звучали примерно одинаково при воспроизведении.

Я попытался измерить среднюю величину выборки (сумма всех абсолютных значений, деленная на количество выборок), но нормализация по этому измерению работает не очень хорошо. Я думаю, что этот метод не работает, потому что он не учитывает частоту звуков, и я знаю, что записи с более высокой частотой звучат громче, чем низкочастотные звуки с одинаковой амплитудой.

Кто-нибудь знает хороший метод измерения громкости звука?

Ответ 1

Root Mean Square часто используется для оценки громкости звуковых файлов. Это потому, что звук, который очень громкий, может не восприниматься таким образом, если он очень короткий. Также помните, что мощность растет экспоненциально с квадратом амплитуды.

Звуковые выродки в Hydrogen Audio знают тонну об этом материале... проверьте их бесплатное программное обеспечение Replay Gain. Возможно, вам не нужно вообще программировать.

РЕДАКТИРОВАТЬ: комментарии комментариев по мощности против амплитуды.

Ответ 2

Ну, не будучи экспертом по аудио и добавляя к предыдущему комментарию, вы должны выяснить, что вы определяете как "самое короткое время для максимальной мощности", а затем просто преобразовать волну в необработанную плавающую точку и использовать RMS над растянуть время и непрерывно брать куски такого промежутка времени, найти МАКС, и там у вас есть самая высокая пиковая мощность.

Ответ 3

Чтобы добавить к ответу PeterAllenWebb:

Прежде чем вы вычисляете RMS, вы должны сначала "центрировать" ваш образец (подумайте о 5-минутном WAV, где каждый образец имеет максимальную + амплитуду). Лучший способ сделать это - использовать фильтр верхних частот на дозвуковой частоте.

Это все равно не будет принимать частоты, которые люди чувствительны к подсчету. Для этого вы можете использовать A-weighting. Там есть страница, где вы можете рассчитать его в Интернете: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html

Код, кажется, здесь: http://www.diracdelta.co.uk/science/source/a/w/aweighting/multicalc.js

Ответ 4

Чтобы повторить то, что говорили некоторые другие люди, используйте значение RMS для оценки "громкости" прохода звука.

Но, если вы имеете дело с импульсивными звуками, такими как выщипывание или ударные удары, вам нужно сделать скользящее значение RMS и выбрать только значение RMS пика. Измерьте 100 мс звука, сдвиньте окно, снова измерьте и т.д., А затем нормализуйтесь в соответствии с самым большим значением, которое вы найдете.

Определенно удалите любое значение постоянного тока перед выполнением RMS, и A-weighting сделает его более похожим на то, как мы слышим. Здесь код для A-weighting в MATLAB/Octave и Python.

Ответ 5

Я мог бы быть здесь, но если у вас есть волновой блок, вы можете загружать его в несколько файлов и немного разбираться в томах, чтобы они были одинаковыми. Кроме того, если у вас есть определенные разделы файла, которые громче, вы можете выбрать этот раздел и уменьшить громкость для этого раздела.

EDIT: И, к сожалению, это не "метод" для измерения объема, но если вам просто нужно сделать все равно, это должно работать нормально.