4

我想使用 sox 更改我拥有的每个音乐文件夹中每个 mp3 的音高。我在 bash 中写了这个:

function pitch_mp3 {
for mp3 in /home/mp3s/*/*.mp3 
do 
  cd "$(dirname "$mp3")"
  output=$(basename "$mp3" .mp3)PITCHED.mp3
  sox -S "$mp3" -C 192 "$output" pitch 50
done
}

例如,它将音高添加到 01song.mp3,输出文件为 01songPITCHED.mp3。但发生的情况是 sox 第一次完成这项工作,然后再次循环浏览文件夹并将音高添加到已经音高的 mp3-s,因此它们的文件名原来是 01songPITCHEDPITCHED.mp3。当我注意到时我停止了它,所以我不知道它是否会第三次添加音高等等。

为什么以及如何解决这个问题?

4

2 回答 2

3

如果您只想跳过任何以PITCHED.mp3I 结尾的文件,请使用 case 语句

case "$mp3" in
  *PITCHED.mp3)
    echo skipping "$mp3"
    ;;
  *)
    #repitch as before
    ;;
esac
于 2012-11-13T20:46:33.783 回答
0
function pitch_mp3 {
for mp3 in /home/mp3s/*/*.mp3 
do 
  [[ "$mp3" = *PITCHED.mp3 ]] && continue
  cd "$(dirname "$mp3")"
  output=$(basename "$mp3" .mp3)PITCHED.mp3
  sox -S "$mp3" -C 192 "$output" pitch 50
done
}

我还将扩展名设置为变量,因此我不必重新输入它,但这只是我。

于 2012-11-13T23:52:57.703 回答