1

我使用 sox 转换为 .dat 格式的值似乎没有被标准化 - 希望有人能看到我做错了什么。

我正在尝试做一些类似于这篇关于 sox 和 gnuplot 的很棒的 SO 帖子中描述的事情(我正在将值发送到 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-

4

1 回答 1

1

您的文件中似乎有一个主要的 dc-shift。根据您需要对数据执行的操作,您可能需要在规范化之前将其删除。要做到这一点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

每种效果都按顺序应用。

于 2012-09-07T14:23:22.050 回答