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な形式だと見なすようで、 同じ問題が発生する模様。

この手の組み合わせ依存の問題は、実際にその問題に直面しない限り、問題の存在自体に気付かないから厄介だなぁ。。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42