我使用 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 的“电梯里的爱情”的 11kHz 单声道一样好)。我当然可以在之后手动规范化数据,但我希望有更好、更直接的方法。
谢谢,
-S-
最佳答案
您的文件中似乎有一个主要的直流偏移。根据您需要对数据执行的操作,您可能需要在规范化之前将其删除。要使用 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
每个效果按顺序应用。
关于linux - 使用 sox 转换为 .dat 格式的值似乎没有被规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580163/