[[diary/Kojima]]
・Plamo-5.1とradiru_rec.py
自作の「らじる☆らじる」録音用スクリプト、毎日せっせと語学講座を録音してくれているのだけど、
そろそろサーバ類をPlamo-5.1な環境に移行しようかと思って、新しく組んだマシンで動かしてみた。
atコマンドで録音する機能は問題なく動いたのだけど、生成したmp3なデータファイルはノイズまみれで聞けたもんじゃない。
さて、何がどうなっているのだろう、、としばし追いかけてみた。
結論としては、mplayerで「らじる☆らじる」のサイトからデータをダウンロードしてくるところまでは問題ないものの、
それをlameでmp3に変換するところでエラーが起きているらしい。
改めて手動でWAVなファイルをMP3に変換しようとしてみると
$ lame test.pcm test.mp3
Unsupported data format: 0x0003
というエラーになってしまう。あれれ、、と思ってGoogleで調べてみると、
これはlame-3.8xではサポートしていない32ビットfloatなPCMデータを変換しようとした際のエラーらしい。
何故、WAV形式で保存したデータが32ビットfloatになっちゃうんだろう、と調べてみたところ、
Plamo-5.1ではffmpeg由来のlibavcodecで用が足りるだろうと、
Plamo-5.0では入れていたlibmpg123を外したのが原因だった模様。
このlibmpg123がリンクされていると、mplayerはWAV(PCM)形式のデータを本来の16ビットintな形式で保存するのだけど、
libavcodecを使うと32ビットfloatな形式がデフォルトになるらしい。
libmpg123を使うようにビルドしなおすことも考えたけど、-af format=s16le というオプションを指定すれば、
16ビットintな形式で保存してくれるようなので、とりあえず radiru_rec.py スクリプトで生成するシェルスクリプトに
このオプションを指定するようにしてみたところ、無事 MP3 形式に変換することが可能になった。
ちなみに、lameを3.95あたりに更新すると、32ビットfloatなWAVファイルもちゃんと扱えるようになるものの、
rawなWAV(PCM)データを受ける際の -r オプションを指定すると、受け取ったデータは16ビットintな形式だと見なすようで、
同じ問題が発生する模様。
この手の組み合わせ依存の問題は、実際にその問題に直面しない限り、問題の存在自体に気付かないから厄介だなぁ。。
#comment