Значения от преобразования в формат .dat с использованием sox, похоже, не нормализованы.

Значения моего преобразования в формат .dat с использованием sox, похоже, не нормализовались - надеюсь, кто-то увидит, что я делаю неправильно.

Я пытаюсь сделать что-то похожее на то, что описано в этом замечательном сообщении SO о sox и gnuplot (я отправляю значения для обработки в Java, поэтому немного другой контекст). Проблема в том, что в моем файле .dat я получаю «только небольшие значения», в то время как на страницах руководства говорится, что они будут нормализованы между -1 и 1.

После установки пакетов sox и mp3 для проверки я делаю следующее:

sox elevator.mp3 -c 1 -r 11000 elevator_mediumres.dat
cat elevator_mediumres.dat |cut -c21-33 > elevator_mediumres_values_only.dat
sort -n elevator_mediumres_values_only.dat > elevator_mediumres_values_only_sorted.dat 
# echo min $(head -1 elevator_mediumres_values_only_sorted.dat) max $(tail -1 elevator_mediumres_values_only_sorted.dat)

Это дает вывод «мин. -0,48370361 макс. 9,1552734e-05». Если я делаю первую команду для wav вместо dat, файл wav звучит нормально (так же хорошо, как 11 кГц моно в песне Aerosmith "Love in an lift"). Я мог бы, конечно, вручную нормализовать данные после этого, но я надеюсь, что есть лучший и более простой способ.

Спасибо,

-S-


person Sondre    schedule 06.03.2012    source источник
comment
В итоге я сам выполнил нормализацию в Java вручную (что отлично работает), но все же интересно услышать, есть ли у кого-то что-то, что можно добавить для лучшего способа сделать это.   -  person Sondre    schedule 20.03.2012


Ответы (1)


Кажется, у вас в файле есть большой постоянный сдвиг. В зависимости от того, что вам нужно делать с данными, вам, вероятно, потребуется удалить их перед нормализацией. Чтобы сделать это с sox, сначала определите dc-shift. Вот один из способов с sox, awk и bash:

dc_shift=$(sox infile.wav -n stats 2>&1 | awk '/DC offset/ { print $3 }')

Теперь примените dc-shift и нормализацию к входному файлу:

sox infile.wav normalized.wav dcshift $(( -dc_shift )) gain -n

Командная строка sox построена следующим образом:

sox IN OUT EFFECTS

Каждый эффект применяется последовательно.

person Thor    schedule 07.09.2012