Программа командной строки, которая делает это: sox .
Общая идея алгоритма состоит в том, чтобы найти выборку с максимальным абсолютным значением (аудио должно быть отцентрировано независимо от измерения выборочных данных).
Вы делите максимально возможное значение на это число (которое гарантированно будет равно или меньше), а затем умножаете его на желаемый пиковый уровень (т. Е. Хотите ли вы, чтобы оно достигло 0,95 от максимального? Полного 1,0? ). Если результат не один, он становится вашим значением шкалы. Затем вы перебираете свой файл и умножаете каждый образец на это число.
Например, для аудио с качеством CD максимально возможное абсолютное значение для сэмпла составляет 32767 (если придумать, чтобы упростить пример, реальный диапазон составляет от -32768 до 32767, но трактовка 32767 как вашего максимума значительно упрощает ситуацию), так что если вы отсканировали и самое высокое абсолютное значение, которое вы нашли, было 18000, то ваш коэффициент усиления будет 1,8203888 ..., и если вы хотите, чтобы ваш максимальный объем был 0,9887997070223 * максимально доступный максимальный, то вы получите новый масштабный коэффициент 1,8 , Таким образом, вы перебираете массив, содержащий аудиофайл, и заменяете предыдущее значение для каждого семпла значением * 1.8.
Это можно оптимизировать, выполнив сначала фильтр щелчков, чтобы исключить паразитные переходные процессы, а также путем деэссинга, который гарантирует, что форма сигнала равномерно отцентрирована вокруг медианного значения, удаляя низкочастотные компоненты, которые не могут воспроизводиться динамиками или услышано человеческим ухом. Фильтр щелчков - это нижний проход, а де-эссер - верхний. После запуска этих фильтров будет больше места для усиления звука без искажения.