使用sox从转换为.dat格式的值似乎没有标准化

时间:2012-03-06 08:25:16

标签: linux audio sox

使用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 -

1 个答案:

答案 0 :(得分:1)

您的文件中似乎有重大的直流偏移。根据您需要对数据执行的操作,您可能需要在规范化之前将其删除。要使用sox执行此操作,请先确定直流偏移。这是soxawkbash的一种方式:

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

每个效果都是按顺序应用的。