linux - 使用 sox 转换为 .dat 格式的值似乎没有被规范化

标签 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 的“电梯里的爱情”的 11kHz 单声道一样好)。我当然可以在之后手动规范化数据,但我希望有更好、更直接的方法。

谢谢,

-S-

最佳答案

您的文件中似乎有一个主要的直流偏移。根据您需要对数据执行的操作,您可能需要在规范化之前将其删除。要使用 sox 执行此操作,首先确定 dc-shift。下面是使用 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

每个效果按顺序应用。

关于linux - 使用 sox 转换为 .dat 格式的值似乎没有被规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580163/

相关文章:

linux - 帮助调试具有正确脚本路径并在手动触发时工作的 cron 作业

linux - VIM 中的一些 bash 命令将输出发送到 bash 而不是 VIM

android - 无法在NDK oboe LiveEffect示例代码中更改音频源

SoX 我如何使混合不降低音量

audio - Sox:连接多个音频文件,中间没有间隙

python - 从 python 脚本导入 shell 变量

c - 使用 ld 手动链接 SDL/openGL 应用程序

matlab - 在 Matlab 中读取或转换 Midi 文件

iphone - 使用 AudioUnit 在 iPhone 上播放多个正弦波

python - 从音频文件生成波形图像