はじめに
soxは、音声ファイルをコマンドラインから加工・変換することができる便利なコマンドだ。フォーマットの変換などはmanを見ずにできるが、ある程度込み入った処理をするとなった途端、Googleでいくつものページを見返すことになって不便なので、ここに過去に使ったコマンドとそのオプションの備忘録を残しておく。
オーディオ形式の変換
最も多い使い方、wavファイルから、mp3などに変換するパターン。
$ sox <input>.wav <output>.mp3
またはその逆。あまり多く使わないと思いきや、プログラムで使うライブラリや、パッケージがサポートしている音楽ファイル形式がまちまちで頼ることがしばしばある。
上記の場合、ただ変換するだけでなく、サンプルレートは16kでモノラルじゃないと動かないとか言う場合もある。そういった場合は、エフェクトをかけて、変換を行う。
$ sox <input>.mp3 <output>.wav channels 1 rate 16k
録音音声がraw(ヘッダレス)形式でwavに変換を行う場合、rawのタイプ指定を行う必要がある場合もある。
$ sox -r 16k -e signed -b 8 -c 1 <input>.raw <output>.wav
こんなもんだろうか。他にも遭遇した場合はまた追記していくことにする。
結合
2つの音楽ファイルを結合する場合はこちら。
$ sox <input1>.wav <input2>.wav <output>.wav
混合
2つの音楽ファイルを混合する場合、
$ sox -m <input1>.wav <input2>.wav <output>.wav
X倍再生
スロー再生とか高速再生とかしたい場合はこちら(例は1.2倍、速くなる)。
$ sox <input>.wav <output>.wav speed 1.2
トリミング
長い音楽ファイルの一部だけを取り出すトリミング作業をするときのコマンドオプション。
$ sox <input> <output> trim <start> <trim_time>
$ sox <input> <output> trim <start> =<end>
それぞれ
- input: 入力ファイルのパス
- output: 出力ファイルのパス
- start: 開始秒
- trim_time: 開始秒からのトリミング時間(秒)
- end: 終了秒
になる。
正規化
何かの理由で、再生するソースの音量がとても小さい or 大きい場合に音量を正規化するコマンドオプション。
$ sox <input> <output> norm
何気に優秀なplayコマンド
Linuxなどで音楽や音声ファイルを再生するコマンドラインは、alsa playerが有名だが、soxを入れたときについてくるplayコマンドは、soxの処理を入れながら再生することが出来るため、ちょっと凝った処理をしたい場合に威力を発揮する。
$ play <input> trim <start> <end>
簡易的な音再生プログラムを作りたい場合は、popenでこれを呼び出すとかなり時間節約できるかも・・
対となるrecコマンド
再生(play)ができるなら、録音もできるでしょという感覚は正解でもちろん、録音用のコマンドも提供されている(ただ、どちらもsoxのショートカットにすぎない)
$ rec -c 1 -r 16k output.wav trim 0 360
上記は、1チャンネル、サンプルレート16kHzで360秒、wavファイルを録音するときのコマンド。録音時間を指定できるのは以外と便利だったりする。