组合 .wav 文件的排列

combine permutations of .wav files

我正在尝试组合一些 .wav 文件的排列组合。
有 4 种乐器的 6 种变体。每个生成的曲目都应该有每种乐器之一。如果我的数学是正确的,应该有 24 个唯一的排列。
这些文件的名称如下:

beat_1.wav, beat_2.wav ...
bass_1.wav, bass_2.wav ...
chord_1.wav, chord_2.wav ...
melody_1.wav, melody_2.wav ...

我尝试将它们与

结合起来
sox -m {beat,bass,chord,melody}_{1..6}.wav out_{1..24}.wav

但是无论我为 out_n.wav 文件使用什么范围的值,sox 都会给出此错误 立即:

sox FAIL formats: can't open input file `out_23.wav': No such file or directory

out_23.wav中的数字总是比我指定的范围小一位。

我愿意使用 sox 和 bash 以外的工具,前提是我可以在一个 command/program 中生成所有曲目(我不想在 Audacity 中手动完成,例如)。

如果您将 sox 替换为 echo,您将看到您构建的命令并没有真正按您想要的方式排列:

$ echo sox -m {beat,bash,chord,melody}_{1..6}.wav out_{1..24}.wav
sox -m beat_1.wav beat_2.wav beat_3.wav beat_4.wav beat_5.wav beat_6.wav bash_1.wav bash_2.wav bash_3.wav bash_4.wav bash_5.wav bash_6.wav chord_1.wav chord_2.wav chord_3.wav chord_4.wav chord_5.wav chord_6.wav melody_1.wav melody_2.wav melody_3.wav melody_4.wav melody_5.wav melody_6.wav out_1.wav out_2.wav out_3.wav out_4.wav out_5.wav out_6.wav out_7.wav out_8.wav out_9.wav out_10.wav out_11.wav out_12.wav out_13.wav out_14.wav out_15.wav out_16.wav out_17.wav out_18.wav out_19.wav out_20.wav out_21.wav out_22.wav out_23.wav out_24.wav

所以我们看到您的输入有 24 种组合,但它还在同一行提供 24 种输出,根据 sox 的文档,所有输入都被视为输入,除了最后,因此,文件 out_1.wav ... out23.wav 也将被视为输入而不是输出。所以,你的逻辑有问题。

如果你想遍历所有 24 种组合,一次一个,我建议使用 for 循环,例如

i=0
for f in {beat,bass,chord,melody}_{1..6}.wav
do
  ((i++))
  echo "Input: " $f "Output: out_${i}.wav"
done

输出:

Input:  beat_1.wav Output: out_1.wav
Input:  beat_2.wav Output: out_2.wav
Input:  beat_3.wav Output: out_3.wav
Input:  beat_4.wav Output: out_4.wav
Input:  beat_5.wav Output: out_5.wav
Input:  beat_6.wav Output: out_6.wav
Input:  bass_1.wav Output: out_7.wav
Input:  bass_2.wav Output: out_8.wav
Input:  bass_3.wav Output: out_9.wav
Input:  bass_4.wav Output: out_10.wav
Input:  bass_5.wav Output: out_11.wav
Input:  bass_6.wav Output: out_12.wav
Input:  chord_1.wav Output: out_13.wav
Input:  chord_2.wav Output: out_14.wav
Input:  chord_3.wav Output: out_15.wav
Input:  chord_4.wav Output: out_16.wav
Input:  chord_5.wav Output: out_17.wav
Input:  chord_6.wav Output: out_18.wav
Input:  melody_1.wav Output: out_19.wav
Input:  melody_2.wav Output: out_20.wav
Input:  melody_3.wav Output: out_21.wav
Input:  melody_4.wav Output: out_22.wav
Input:  melody_5.wav Output: out_23.wav
Input:  melody_6.wav Output: out_24.wav