4

私が持っているすべての音楽フォルダー内のすべての mp3 のピッチを、sox を使用して変更したいと考えています。私はこれを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 であることが判明しました。気がついたらやめていたので、3回目以降は音程が上がるかわかりませんが…。

これを修正する理由と方法

4

2 に答える 2

3

Iで終わるファイルをスキップしたいだけPITCHED.mp3の場合は、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 に答える