2013年01月29日

Soxは便利

以前、soxでカセットテープ音源のスピード調整という記事でAudacityなみの処理をコマンドラインから行うSoxというアプリを使った経験を書いたが、再びこのSoXを利用したので一例報告まで。

発端は、妻がBluetooth接続のスピーカーを買ったことだ。5年ばかり前の引越しの際に妻が長年愛用したカセットコンポを処分して以来、我が家にはオーディオ機器がなかった。今回買ったBluetoothのスピーカーは、オーディオ機器というにはあまりに貧弱だが、それでもたとえばテレビのスピーカーなんかに比べればはるかにマシで、いい音がする。ある意味、音質に限界のあるMP3ファイルの再生にはちょうど似つかわしいかもしれない。ということで、MP3プレーヤーとして使えるスマホを音源として、久々に音楽のある生活が戻ってきた。

ところが、ここで困るのがMP3ファイルの音のレベルの差だ。音源がレコードやCDならその1枚の中でレベルはきっちり調整されている。自分で録音したテープなら、録音するときにそのあたりは気を使ってできるだけ差の出ないようにしている(というか、はるか昔、「エアチェック」をやっていた高校生の私は、けっこうそのあたりに気を使ったものだ)。しかし、MP3ファイルはバラバラのソースからバラバラに入手したものをまとめて聞くので、レベルの差が気になる。曲が替わるたびに音量を変更するのは現実的ではないし、かといって突然大きな音になったり聞き取れなくなるのもの快適ではない。

ということで、MP3の録音レベルを統一する必要がある。Audacityでやれば簡単なのだけれど、いちいちファイルを開いてフィルタをかけ(「正規化」というフィルタでたいていはOKだ)、エクスポートするという操作をファイルの数だけ繰り返すのはたいへんだ。となると、SoXでバッチ処理がよかろうということになる。

調べてみると、SoXの正規化は、
sox infile outfile gain −n
というコマンドでOKなようだ。これをバッチでやるには(元ファイルが.ogg形式として)、

for i in `ls *.ogg`; do echo -e "$i"; sox $i a/$i.ogg gain -n; echo -e "$i.ogg"; done

というスクリプトになるようだ。なお、このコマンドは該当するファイルの存在するディレクトリにはいって実行し、実行前に予めそのディレクトリ内に「a」という名前のフォルダを作成しておく必要がある。このスクリプトの詳細な意味は、実のところ私にもよくわかっていない。前の記事に書いたスクリプトを必要に応じて変更しただけだし、そのさらに元のスクリプトの出典は、その記事のどこかにリンクをはってあるはずだから、必要な方はぜひたどってほしい。

ともかくも、これで録音レベルは揃った。音楽を聞くのもなかなか一筋縄ではないな。
posted by 松本 at 21:19| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック