使用sox拼接交叉淡化一组音频文件

时间:2012-01-21 18:07:29

标签: audio scripting sox piping

我可以使用SoX加入和交叉淡化两个音频文件,如下所示:

sox file1.wav file2.wav outfile.wav splice -q `soxi -D file1.wav`,0.5

其中soxi替换获取file1的持续时间,0.5是交叉淡入淡出的长度。我现在正在尝试将其扩展到任意数量的文件,以便将它们串在一起,并在它们之间使用短交叉淡化。似乎有两种方法:管道和脚本。 Sox有一个-p选项告诉它将它的输出视为管道(而不是写文件)。但是,对于每个命令有许多输入和参数,不清楚在后续命令中如何分配输出(and input?)。到目前为止,我已经得到了下面的行,无法正常工作,尝试扩展到3个文件。

sox -p file1.wav file2.wav splice -q `soxi -D file1.wav`,0.5 | sox -p file3.wav outfile.wav splice -q `soxi -D file3.wav`,0.5

您对sox管道和脚本的提示将不胜感激。

1 个答案:

答案 0 :(得分:2)

我已经完成了

的大部分工作
sox --combine concatenate *.wav _merge.wav splice -q 3,1

最后的拼接效果将交叉淡入淡出的开始位置放在第一个文件中3秒,并使用1秒作为交叉淡入淡出持续时间(两个文件的开头和结尾半秒)。这个方法是一个临时修复,因为我可以选择在输出中只包含~3个文件(使用其他方法)。 一个更好的答案将弄清楚如何获取当前文件的持续时间,并用它代替3。

sox --combine concatenate *.wav _merge.wav splice -q $(soxi −D {}),1

如果此处的{}选择了当前项目(如find),那就可以了。但这似乎不起作用。