mplayerとlameを使って,NHKラジオの「らじるらじる」を録音する方法があちこちに書かれている.たとえば,
など.
mplayerの「再生デバイス」としてpcm/wavファイルを指定できるので,
それをlameにリダイレクトというストーリーだ.
だいたいうまくいくのだが,長時間録音をしようとすると,おおむね3時間半くらいで止まってしまう.
オペラとか長い番組があるので,5時間くらいは録音したいことがあるので,ちょっと嫌だ.
ソースを読んでみたところ,どうも次のような事情らしい.
- mplayerが最初にwaveヘッダに「データの長さは 0x7ffff000 だ」と書き込む.
- lameはそれを信じて,その長さまで読んだら終了してしまう.これがだいたい3時間半くらい.
(これは双方ともやむを得ない話であって,特に mplayer の側は最初にそういういい加減な値を書いては
いるものの,録音が終了したら正しい値に上書きしようとするので,別に責められない.
今回のようにパイプに通してしまうと seek できないから,上書きには失敗するけれど.)
試みに,0x7ffff000 を小さな値に書き直して make してみると,もっと短い時間で終了してしまうようになったので,これが原因であろう.以下のようにして回避できる.
- (これは別段行わなくても良いようだが,) mplayer 側で,waveヘッダをつけないようにする.
これには,”-ao pcm:file=…” のところを “-ao pcm:nowaveheader:file=…” と書き換える. - lame 側で,raw pcm ファイルを読む設定にする.
これには,”-r” オプションを指定すればよい.manpageには,この場合には sampleレート等を指定する必要があると書いてあるが,特にそうしなくても動いているようだ.(今回使ったlameのバージョンは 3.99.5)