アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

soxコマンドで音声ファイルを編集する10の例

こんにちは、浦本です。

今回は、サウンドファイルの編集に便利なsoxコマンドの使用例を紹介します。

sox (Sound eXchange) 配布元: http://sox.sourceforge.net/

soxを使うとコマンドだけでサクっとサウンド編集を行うことができます。
LinuxMacWindowsで利用可能です。
日々のサウンド編集だけでなく、Webアプリのバックエンド処理として活用しても面白いと思います。

ちなみに、soxネタは被らないだろうと思っていたのですが、
検索してみるとなんとアシアルブログの過去記事でも一度紹介されていました。さすがKさん!
以下はその続編として書きたいと思います。


【1】音量を上げる
+3dB上げる例です。
soxの基本的な使い方は「sox 入力ファイル 出力ファイル エフェクトオプション」となります。


$ sox in.wav out.wav gain 3


【2】リミッター付きで音量を上げる
音量を上げながらも、リミッターによって音割れを抑えることができます。


$ sox in.wav out.wav gain -l 3


【3】ノーマライズする
ピークが最大音量(0dB)となるように、自動的にgainを調節します。


$ sox in.wav out.wav gain -n


【4】リピートする
8回リピートした音声を出力する例です。
例えば1小節の素材を8小節にして保存できます。


$ sox in.wav out.wav repeat 8


【5】連結する
4ファイルを連結する例です。


$ sox inA.wav inB.wav inC.wav inD.wav out.wav


【6】フェードインする
先頭の5秒間の音量を徐々に上げてフェードインさせます。


$ sox in.wav out.wav fade t 5


【7】フェードアウトする
先頭から60秒の時点を終了位置とし、終わりの5秒間をフェードアウトします。


$ sox in.wav out.wav fade t 0 60 5

1番目の数字がフェードイン秒数(この場合0)、2番目が終了位置の秒数(残りはカットされる)、3番目がフェードアウト秒数です。

【8】ハイパスフィルタをかける
1000Hzより高音域を通します。


$ sox in.wav out.wav highpass 1000


【9】ローパスフィルタをかける
1000Hzより低音域を通します。


$ sox in.wav out.wav lowpass 1000


【10】サウンド情報を表示する
再生時間やサンプル数などの情報を表示することができます。
この場合、soxではなくsoxi(Sound eXchange Information)です。


$ soxi in.wav
Input File     : 'in.wav'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:01.90 = 84000 samples = 142.857 CDDA sectors
File Size      : 401k
Bit Rate       : 1.68M
Sample Encoding: 16-bit Signed Integer PCM


以上のように簡単な加工であれば手軽にサウンド編集ができるので、
皆さんもぜひ試してみてください。
私の場合は、DAWで調節するまでもないような日々のミックスを、
あとで聴きやすいように音量調節するため利用しています。

soxコマンドにはオプションが多く存在するため、
こちらのHTMLマニュアルを見ながら利用するのがおすすめです。
http://sox.sourceforge.net/sox.html

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秒ごとにボリュームがフェードインする音を出力出来ます。

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