批量转置

批量转置

我想将多个音频文件变调为多个音高,每个文件 12 个。

以下成功地改变了一个文件的音调:

sox *.wav Examples_100.wav pitch 100

以下成功将目录中的所有文件从 wav 转换为 mp3:

for f in *.wav; do sox "$f" "converted/${f%%.wav}.mp3"; done

我尝试组合这些命令来获得我想要的结果。这是我尝试将itch 100命令应用于目录中的所有文件。

for f in *.wav; do sox "$f" "converted/${f%%.wav}.wav” pitch 100; done

所以首先我需要解决这个问题。

但最终我希望将以下内容应用于每个文件:

pitch 100
pitch 200
pitch 300
pitch 400
pitch 500
pitch 600
pitch -100
pitch -200
pitch -300
pitch -400
pitch -500
pitch -600

因此,目录中的每个文件将在输出目录中返回 12 个文件。

不过,如果你能帮我解决第一个问题,也许我就能自己解决第二个问题。

第 1 部分现已解决。

现在我需要知道为什么:

for f in *.wav; 
do sox "$f" "converted/${f%%.wav}.wav" pitch 100;
do sox "$f" "converted/${f%%.wav}.wav" pitch 200;
done

运行报错:

-bash: syntax error near unexpected token `do'

答案1

使用每个循环(并且只有一个)do语句for,而不是循环中运行的每个命令一个。例如

for f in *.wav; do
  sox "$f" "converted/${f%%.wav}.wav" pitch 100
  sox "$f" "converted/${f%%.wav}.wav" pitch 200
done

或者:

for f in *.wav; do
  for p in 100 200 300 400 500 600 -100 -200 -300 -400 -500 -600 ; do
    sox "$f" "converted/${f%%.wav}.$p.wav" pitch "$p"
  done
done

相关内容