我想将多个音频文件变调为多个音高,每个文件 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