SVX日記
2006-02-15(Wed) Cygwinでsoxしてlameする
PCを新調して、HDDが80MBになったので、iTunesをインストールして、手持ちのCD百数十枚をすべて放り込んだら、ナンでもカンでもこのPCに集めてしまいたくなってきた。残りHDD容量は15GBを切っているが、まだ15GBもあるという見方もできる。なんとなく、過去にCD-R焼いて保存してあった、デジカメの写真もHDDに呼び戻してしまう。なーに、容量が不足したら、改めてDVDに焼いてしまえばいいのだ。
そうだ。そういえば先日、過去に録り溜めた「英会話入門」のCD-Rが見つかったのだった。mp3に圧縮して、CD5枚ほどになっているから、軽く数年分はありそうだ。以前に書いたとおり、最近「英会話入門」が再開されたのだが……しかし、どうも昔のノリでないんだよなぁ、コレが。で、番組を聞く環境整備もできないまま、しばらく聞かずに自動録音サーバを放置しておいたら、いつの間にか遠山顕先生は「英会話中級」に移っていて、録音時間がズレ、録音しソビれていた……えぇい!! なにしろ、このCD-RもすべてPCに放り込んで、聞く環境を整備するのだッ!!
……と、意気込みつつ、昔のCDを読ませたトコロ、妙にmp3のファイルサイズがデカい。英会話入門は15分番組なのに8MBも食っている。普通の曲だと15分で15M弱になるはずなので、8MBは十分に小さいが、モノラルのしかもAMラジオの録音に、44kHz、80kbpsというのは、ちょっとオゴりすぎじゃねぇか。当時のオイラはナニを考えていたんだろう? こりゃマズい。なにしろマズい。マズいったら、マズい。これは再エンコードしなおして、正しい状態にしなければ。
最終的に英語を聞くのが目的なのであれば、ビットレートなんて気にせずにサッサと聞き始めればいいのだが、どーもオイラの悪いクセが出た。こーゆー問題を解消しないと聞く気にならなくなってしまうのである。だが、これは技術者全般の悪いクセであろう。正しい状態にして、キチンとライブラリ化しないと気がすまない。だってそうすりゃ、プレイヤへの転送も速くてラクだ。ラクするための苦労をいとわないのが正しい技術者の姿である。だから、これでいいのだだッ!!
再エンコードする方法にもこだわる。イッキに、ラクに、確実に……と考えると、コマンドインターフェイスのヤツ以外には考えられない。unix系のmp3エンコーダである「lame」とサウンドコンバータ「sox」を利用することにしよう。これをcygwin環境にインストールするのである。
しかしながら、cygwin用のバイナリ配布は行われていない。よって、サックリとはインストールできず、いわゆる「./configure、make、make install」を行う必要がある……のだが、オイラはこの方法でちゃんとインストールできたコトが少ないんだよねぇ。大丈夫だろうか。まぁ、とりあえず、やってみる。
まずは「lame」だ。「./configure、make、make install」……お!? これは一発でインストールできた。特に問題も生じない。じゃ、この調子で「sox」だ……が、ダメ。最後の「make install」する段になって……
SUZAKU:/home/mitsu/sox-12.17.9 $ make install
make: `install' は更新済みです
……とか出ちまってインストールができない。なんだ!? ナニが悪いのか? 最近はLinuxのサポートをやっているので、不具合の根っこを調査するのに、ソースを読んでどうこうするのには慣れたが「./configure」や「make」はいまだに苦手科目なんだよなぁ。こういう場合は、どうやって問題の根を探したらいいんだ?
$ ./configure
:
:
Old Rate enabled.................. no
Fast ulaw enabled................. yes
Fast alaw enabled................. yes
GSM Support....................... yes
ALSA Driver....................... no
OSS Driver........................ no
SUN /dev/audio.................... no
Ogg Vorbis support................ no
MAD MP3 Decoder................... no
LAME MP3 Encoder.................. no
soxは外部に関連プログラムがあると、自動的にそのライブラリを利用するようにコンパイルされる。今回の場合はlameだ。ライブラリを取り込んで、soxが直接mp3を吐けるようになる。だが、既にlameのインストールは終わっているハズなのに表示が「no」のままだ。別にsoxでmp3を吐けなくても、パイプでlameに渡してもいいのだが、せっかくそのような機能があるのに、利用しないテはない……というか、利用できるハズなのに理由がわからず利用できないのは、どうにも気持ち悪い。
さらに気になるのはその前のmadというヤツ。こいつがあればsoxが直接mp3を読めるようになるっぽい。今回の場合は入力も出力もmp3であるから、そんなものが利用できるなら、利用しないテはない……というか、利用できるハズなのに理由がわからず利用できないのは、どうにもこうにも気持ち悪い。
ちょっと本腰入れて「./configure」について勉強するか。ググると「configureをデバッグする」なんてぴったりのページが見つかった。ふみふみ……config.logを読めって?
SUZAKU:/home/mitsu/sox-12.17.9 $ vi config.log
configure:4695: checking lame/lame.h usability
configure:4707: gcc -c -g -O2 -mno-cygwin -Wall -mno-cygwin conftest.c >&5
conftest.c:68:23: lame/lame.h: No such file or directory
configure:4713: $? = 1
即席で作られた「conftest.c」の中には「#include
#include <lame/lame.h>
int main() {
printf("Where is lame?\n");
}
$ gcc test.c
$ gcc -c -g -O2 -mno-cygwin -Wall -mno-cygwin test.c
test.c:1:23: lame/lame.h: No such file or directory
$ gcc -mno-cygwin test.c
test.c:1:23: lame/lame.h: No such file or directory
「-mno-cygwin」だ。これってナニ? 調べたら、cygwinライブラリを利用しないバイナリを生成するオプションとのコト。cygwinライブラリを組み込むと、cygwinをインストールしていない環境で動かなくなるとか、自動的にGPLになってしまうという政治的な問題があるらしいが、そんなの自分のPCで使う分には関係ないやん。サクッと……
SUZAKU:/home/mitsu/sox-12.17.9 $ vi configure
2849 case "$target" in
2850 *cygwin* )
2851 # CFLAGS="$CFLAGS -mno-cygwin"
2852 # CPPFLAGS="$CPPFLAGS -mno-cygwin"
2853 # LDFLAGS="$LDFLAGS -mno-cygwin"
2854 ;;
2855 esac
configure:4695: checking lame/lame.h usability
configure:4707: gcc -c -g -O2 -Wall conftest.c >&5
configure:4713: $? = 0
configure:4831: checking for lame_init in -lmp3lame
configure:4861: gcc -o conftest.exe -g -O2 -Wall conftest.c -lmp3lame >&5
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lmp3lame
collect2: ld returned 1 exit status
configure:4867: $? = 1
今度はココでコケとる。「-lmp3lame」が見つからん? ライブラリの「libmp3lame.a」がないってことか? それが「/usr/local/lib」下にあるのは確認済みじゃゾイ。ライブラリの位置を教えたればいいんかな? 以下のようにオプション付けて、再度「./configure」じゃ!!
$ ./configure "LIBS=-L /usr/local/lib"
:
:
Old Rate enabled.................. no
Fast ulaw enabled................. yes
Fast alaw enabled................. yes
GSM Support....................... yes
ALSA Driver....................... no
OSS Driver........................ yes
SUN /dev/audio.................... no
Ogg Vorbis support................ no
MAD MP3 Decoder................... yes
LAME MP3 Encoder.................. yes
SUZAKU:/home/mitsu/sox-12.17.9 $ make install
make: `install' は更新済みです
うげ。相変わらずやん……コレ、意味わからん……でも……「$ make -n uninstall」は動くんだよねぇ……って、もしかして、アレか? この「install」って名前が悪い? つーか、同じディレクトリに置いてある「INSTALL」っていうドキュメントファイルに反応している!?
SUZAKU:/home/mitsu/sox-12.17.9 $ mv INSTALL INSTALL.txt
SUZAKU:/home/mitsu/sox-12.17.9 $ make install
$ sox before/1007.mp3 -b -r 16000 -t wav - | lame -b 24 - - > after/1007.mp3