C ++ - нормализует уровень громкости wav-файла - PullRequest
3 голосов
/ 23 ноября 2011

Есть идеи, как нормализовать wav-файл, чтобы уровень громкости стал максимальным с помощью c ++? Какая формула? Я погуглил весь день, но не нашел ответа. Любая помощь, пожалуйста!

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Предположим, что NewMaxVal - это новое максимальное значение в требуемом звуковом потоке.Самое простое решение - найти текущее максимальное значение (CurMaxVal) в звуковом потоке, а затем умножить все значения на NewMaxVal / CurMaxVal.Более продвинутой формой является использование динамического компрессора .

3 голосов
/ 23 ноября 2011

В файле WAV значения представлены в виде 0-1 (или от -1 до 1) в зависимости от вашего подписанного / неподписанного представления.Каждое слово (два байта), которое вы читаете, является непосредственно образцом, поэтому никакой другой обработки не требуется.В случае 8-битного представления 1 будет 256, а в случае 16-битного представления 1 будет 65536.

Если вы умножите все выборки на число, громкость увеличится.Это так просто!Чтобы преобразовать громкость до максимально возможного уровня, пропустите весь файл, чтобы узнать максимальное значение.а затем умножьте числа так, чтобы максимальное значение достигло максимального значения без переполнения.

Вы можете использовать libsndfile для обработки всех ваших семплов.WAV-файлы очень просты в использовании, но есть много комбинаций, о которых вам нужно знать.

...