多个音频文件的Sox和音高变化

时间:2012-11-13 20:32:17

标签: linux bash debian sox

我想用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。当我注意到时,我停止了它,所以我不知道它是否会第三次添加音高等等。

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

2 个答案:

答案 0 :(得分:3)

如果您只想跳过任何以PITCHED.mp3结尾的文件,我会使用案例陈述

case "$mp3" in
  *PITCHED.mp3)
    echo skipping "$mp3"
    ;;
  *)
    #repitch as before
    ;;
esac

答案 1 :(得分: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
}

我也将扩展名变为变量,所以我不必重新输入它,但那只是我。