Запретить SoX выполнять обрезку?

У меня сильно "переполненный" WAV-файл (образцы записаны в 32-битном формате с плавающей запятой): вместо [-1.0, + 1.0] диапазон сэмплов достигает [-5.0, + 5.0].

Использование SoX для получения необработанных аудиосэмплов PCM из файла WAV:

sox --bits 32 --channels 1 --encoding floating-point --rate 48000 input.wav output.raw

Я получаю предупреждения:

sox WARN sox: `input.wav' input clipped 1163400 samples
sox WARN sox: `output.raw' output clipped 605664 samples; decrease volume?

Когда я смотрю на вывод, я вижу, что сэмплы были обрезаны, и теперь диапазон составляет [-1.0, + 1.0]. Однако я не этого хочу.

Я хотел бы иметь точно такой же вывод, что и ввод, только в другом формате (RAW вместо WAV). Мне нужно использовать инструмент командной строки для этой задачи. Есть ли способ предотвратить обрезку SoX?


person Danijel    schedule 04.06.2020    source источник
comment
похоже, что sox parm gain -6 снизит амплитуду на 6 дБ   -  person Scott Stensland    schedule 29.06.2020


Ответы (1)


Я получил ответ из списка рассылки SoX.

Требуемое поведение невозможно, однако в этом конкретном случае есть обходной путь. Если заменить кодировку входного образца как 32-битное целое число со знаком вместо числа с плавающей запятой, значения будут скопированы без изменений; поскольку вывод без заголовка, не имеет значения, что SoX думает об образцах.

Итак, это работает:
sox --bits 32 --channels 1 --encoding signed-integer --rate 48000 input.wav output.raw

person Danijel    schedule 29.06.2020