読者です 読者をやめる 読者になる 読者になる

NHKラジオ英会話を録音するまでの軌跡 Part3

これまでの記事はこちら。

お金を出して買ってみた*1アプリでは予約録音機能に難があり、どうしたもんかと悩む。使い続けるか、音源を買うか、別の手段を考えるか・・・。
当初はiPhoneで直接録音できたらいいななんて考えていたけど、別にMacで録音してiTunes経由でiPhoneに渡せればいいわけで、それじゃあMacで録音できる手段を探してみようと思いたち、いろいろと検索を始める。

それで見つけたのが下記のページ。
NHKネットラジオをVLCで録音するスクリプト - Qiita

VLCでストリームをmp3に変換してファイル出力するスクリプト

VLCというフリー*2かつマルチプラットフォーム対応のメディアプレイヤーを介して、NHKネットラジオを録音しちゃうという思いもよらなかった手法。しかも、ちょちょいとシェルスクリプトを記述するだけ!これなら、Cronでスケジュールすれば予約録音も実現可能!おお!神よ!

早速、上記のサイトを参考にシェルスクリプトを作成して、まずはコマンドラインから直接実行してみる。ちゃんと録音できてる!うひょー!
じゃあCronに登録して日次実行ということで、月-金の6:45-7:00でスケジューリングして放置しておく。

翌日、仕事から戻ってきて録音したファイルを確認してみると、ファイルが作成されていない!なぜ?ここで数時間悩む。Cronが動いていないのか、はたまた別の問題なのか・・・。
自分で出力設定したログを確認するのを忘れていて、中身を確認してみたら「Permission denied」の文字が・・・。ああ、crontab書いたとき、コマンドの先頭に「sh」って書いてなかったわ・・・。痛恨のミス。
気を取り直して、crontabを修正してまた放置。次回は録音できてるっしょ。

さらに翌日、仕事から戻ってきて録音したファイルを確認してみる。今度はちゃんとファイルが作成されていた。
早速視聴してみるも、ずっと無音・・・。おっかしいなあ。crontabに記述したコマンドを、直接コマンドラインから実行するとちゃんと録音できる。でも、Cronから実行すると、以下のログが出力される。

# logger -t recording -iに標準出力を渡して出力した結果
Oct  3 01:45:01 server.local recording[46133]: [0x10050df10] [cli] lua interface: Requested shutdown.
Oct  3 01:45:01 server.local recording[46133]: Bye-bye!
Oct  3 01:45:01 server.local recording[46133]: > Shutting down.
# こちらは、コマンドラインから直接実行した時に出力されたログ
Oct  3 02:11:45 server.local recording[46337]: [0x100281180] [cli] lua interface: Listening on host "*console".
Oct  3 02:11:45 server.local recording[46337]: VLC media player 2.0.3 Twoflower
Oct  3 02:11:45 server.local recording[46337]: Command Line Interface initialized. Type `help' for help.
Oct  3 02:11:45 server.local recording[46337]: > [0x102100270] mux_dummy mux: Open
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] main access error: connection failed: Connection refused
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] access_mms access error: failed to open a connection (tcp)
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] main access error: connection failed: Connection refused
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] access_mms access error: failed to open a connection (tcp)
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] access_mms access error: cannot connect to server
Oct  3 02:11:45 server.local recording[46337]: [0x102102c10] access_mms access error: cannot read data 2
Oct  3 02:11:46 server.local recording[46337]: [libmp3lame @ 0x1008b5e20] channel_layout not specified

ログに出力された内容でググってみても、あまり明快な回答がない。うーん、Cronじゃダメなのか?

そんなわけで、Cronは捨ててlaunchdを利用してみることにした。OS Xでは、launchdを使うほうが主流らしい。だけど、ジョブ設定のXMLを書くのがだるすぎる!Cronのような直感性皆無。
そこで、「Lingon 3」というMac用アプリを購入してみた。

このアプリでジョブ設定のXMLをある程度作成できるらしい。250円するけど、まあしょうがないってことで購入してジョブを作ってみた。
さて、今度こそは予約録音できるかなーって試しに動かしてみた。だけど、Cronと同じくファイルは作成されるものの、やはり無音になる・・・おお・・・神よ・・・。

その後いろいろ調べた結果(主に英語サイト)、Cronやlaunchdなどを介して録音のシェルスクリプトを実行した場合、正常に録音ができないらしい。原因は詳しく調べてないけど。
今度こそは予約録音できると思ったのに、またもや失敗。しかも、250円ロスト。まあLingon3については、また別の用途があるだろう。さて、どうしたものか・・・。

つづく・・・

*1:といっても85円と少額。つるセコー!

*2:Donationwareなので、完全無料ではないけども