【问题标题】:Sox and pitch change of multiple audio files多个音频文件的 Sox 和音高变化
【发布时间】:2012-11-02 07:50:51
【问题描述】:

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

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

【问题讨论】:

    标签: linux bash debian sox


    【解决方案1】:
    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
    }
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多