使用 sox splice 对一组音频文件进行淡入淡出

ted*_*uss 6 audio scripting piping sox

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

sox file1.wav file2.wav outfile.wav splice -q `soxi -D file1.wav`,0.5
Run Code Online (Sandbox Code Playgroud)

其中 soxi 替换是获取 file1 的持续时间,0.5 是交叉淡入淡出的长度。我现在试图将其扩展到任意数量的文件,以便将它们串在一起,中间有短的交叉淡入淡出。似乎有两种方法:管道和脚本。Sox 有一个 -p 选项,告诉它将输出视为管道输出(而不是写入文件)。但是,由于每个命令有许多输入和参数,不清楚在后续命令中如何分配输出(和输入?)。到目前为止,我有下面的行,它不起作用,试图扩展到 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
Run Code Online (Sandbox Code Playgroud)

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

ted*_*uss 3

我已经完成了大部分的工作

\n\n
sox --combine concatenate *.wav _merge.wav splice -q 3,1\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
sox --combine concatenate *.wav _merge.wav splice -q $(soxi \xe2\x88\x92D {}),1\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n