Уменьшение / удаление отсечения в SoX при преобразовании частоты дискретизации

Я использую SoX для обрезки набора wav-файлов в 16 кГц, 16 бит, моно-канальные wav-файлы (которые будут подмножествами одного из исходных wav-файлов). Большинство исходных файлов wav уже настроены на эту спецификацию, однако я только что узнал, что некоторые из них имеют разные частоты дискретизации. Поскольку он будет автоматизирован на Java с помощью ProcessBuilder, я решил, что могу использовать следующую команду:

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

и оно только изменит частоту дискретизации если она нет 16000 Hz. Это что он должен делать в файлах с той же спецификацией, но в файлах с разной частотой дискретизации я получаю:

sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?

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

2 ответов


как предложено инструментом, попробуйте немного уменьшить громкость, например, с помощью-V 0.99(или 0.98 и т. д.). Такие небольшие изменения объема незаметны.

пример:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

Если вы все еще сделать вырезку, то звук скорее всего сильно обрезается (т. е. disorted) для начала (это перекликается с современной музыкой; см. Wikipedia: громкость войны) и поэтому предупреждения можно игнорировать - никаких дополнительных искажений не происходит введенный.

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


У меня вопрос. Изменение кодировки wav-файла исправлено:

sox input.wav -e signed-integer output.wav