soxでサウンドファイルを編集

今回はLinux上で手軽にサウンドファイルを編集出来る sox を紹介します。

単純にオーディオファイルを編集するだけならGUIで編集可能なアプリケーションはたくさんあります。どこぞのOSならもっとたくさんあるでしょう。
ですが、バッチ処理をしたり少々複雑な条件でコンバートしようとするとGUIの場合は一筋縄にはいきません。
手軽にシェルスクリプトのみでバッチ処理をしようとすると、やはりコマンドラインに限ります。
そのニーズを満たすものが sox です。


       sox [global-options] [format-options] infile1
      	   [[format-options] infile2] ... [format-options] outfile
      	   [effect [effect-options]] ...

soxのマニュアルから引用 (man sox)

使用例


$ sox -r 22050 hoge.wav	-r 44100 foo.wav   # レートを22050から44100に変更
$ sox -s -c2 -r	22050 -w -t raw	hoge -w	hoge.wav   # 2ch 22050hzのrawファイルをwavに変換

こんな感じで使用できます。
2つめの-tオプションは、タイプの指定です。拡張子で自動判別しますが、このオプションで強制的に指定出来ます。


$ sox hoge.wav piyo.wav	trim 1 15  # 1から15秒まで切り出し
$ sox -v 0.8 hoge.wav piyo.wav # ボリュームを0.8倍にする

など、細かい指定も可能です。

これらを応用して、


for vol in $(seq 0 9)   
do
  sox -v 0.${vol} hoge.wav tmp.raw trim 0 1
  cat tmp.raw >> out.raw
done
sox -s -c2 -r 22050 -w out.raw -w hoge.wav

とすれば、1秒ごとにボリュームがフェードインする音を出力出来ます。

音のバッチ処理を手軽に実現するには都合がいいので、もし使える機会があったら使ってみてはいかがでしょうか。