使用sox转换为.dat格式的值似乎没有标准化 - 希望有人能看到我做错了什么。
我正在尝试做类似于this great SO post about sox and 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)
这给出了输出“min -0.48370361 max 9.1552734e-05”。如果我执行wav而不是dat的第一个命令,那么wav文件听起来没问题(就像Aerosmith的“Love in a elevator”中的11kHz单声道一样)。我当然可以在之后手动规范化数据,但我希望有一种更好,更直接的方法。
谢谢,
-S -
答案 0 :(得分:1)
您的文件中似乎有重大的直流偏移。根据您需要对数据执行的操作,您可能需要在规范化之前将其删除。要使用sox
执行此操作,请先确定直流偏移。这是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
每个效果都是按顺序应用的。