orangeProse別館

orangeProse(本ブログ)の補助

「朗読一語一絵」を録音するPowerShellスクリプトを書いたよ

flow by Hideo Saito on 500px.com

tl; dr

【2017.03.29追記】2017年4月より再放送の時間が変更になるため、諸々変更。

WindowsPowerShellの勉強がてら、書いた。

Radikoolでのサイマルラジオ録音が失敗しがちなので、VLCで録音すればいいじゃない、と思ったので、書いてみた。VLCメディアプレーヤーがインストールされていることが前提。

motrec.ps1ファイルを右クリック」>「PowerShellで実行」で、次回のエフエムモットコム「朗読一語一絵」の録音予約をする(再放送も含む)。

f:id:hidex7777:20170124224644p:plain

スクリプトの実行がシステムで無効になっているため~」どうのこうの、と言われて実行できなかったら、「motrec.bat」をダブルクリックで行けるかもしれない。

いずれにしてもmotrec.ps1ファイルの中の、MP3ファイルを保存するディレクトリの部分を、自分の環境に合わせて書き換える必要がある。

目的

本宮市のローカルFM局、エフエムモットコムでふくしま現代朗読会の朗読番組がはじまった。

  • 金曜08時15分~28分
  • 再放送が火曜17時45分~
  • 4月から再放送は月曜18時45分~

ListenRadio(リスラジ)

エフエムモットコムはCSRA(Community Simul Radio Alliance)で配信されているので、インターネットで聴ける(上記「リスラジ」はフラッシュプレイヤーが必要)。

録音にはしばらくRadikoolを使っていたのだけど、さいきんエラーが頻発してまともに録音できなくなったので、VLC Media Playerを使って録音することにした。ついでに、Power Shellを敬して遠ざけてきたので、このさい勉強しようと思って、PowerShellスクリプトで書いた。

手っ取り早い使い方

VLCメディアプレーヤーがインストールされていなければ、する。

https://github.com/hidex7777/motrecbatからZIPでダウンロード、解凍。

f:id:hidex7777:20170124224711p:plain

PS1ファイルをテキストエディタ(メモ帳など)で開いて、

#MP3ファイルを保存するディレクトリ
$destdir = 'E:\music\fm-mot\'

この部分を自分の環境に合わせて書き換える。C:\Users\ユーザー名\Music\fm-mot\など(たぶん、あらかじめディレクトリを作っておく必要がある)。

motrec.ps1を右クリック、「PowerShellで実行」を選択。うまくいけば、次回放送(再放送も含む)の録音予約がなされる(パソコンの電源をオフにしたり、Windowsからログアウトしてしまうと、予約は取り消され、録音もされません)。

スクリプトの実行がシステムで無効になっているため~」どうのこうの、と言われて怒られたら、motrec.batをダブルクリックで実行できる(この方法が一番楽かも)。

もしくは、PowerShellスクリプトの実行を許可するよう、ポリシーを変更する。

から、「Windows PowerShell」もしくは「Windows PowerShell ISE」で右クリック>「管理者として実行」。

> Set-ExecutionPolicy RemoteSigned

と入力して、「はい(Y)」。

ポリシー変更後は、ps1ファイルを直接実行できる。

放送時間になったら、VLCコマンドプロンプトみたいなのを開いてログを表示するかもしれないけれど、閉じないでください。録音が終わったら自動的に閉じます。

そもそもこのスクリプトの実行自体を忘れてしまう、という場合、スタートアップフォルダにbatファイル(motrec.bat)のショートカットを入れておけば、パソコン起動時に実行されます。Win+Rで「ファイル名を指定して実行」を開き、shell:startupでスタートアップフォルダが開きます。

motrec.batを(ダブルクリック、またはスタートアップに入れて自動的に)実行すると、コマンドプロンプトが開く。 f:id:hidex7777:20170329182159p:plain

そのまま録音予約をしておきたい場合は最小化しておく。閉じたい場合はCtrl+Cで「バッチジョブを終了しますか?」と聞かれるので「Y」と入力してEnterf:id:hidex7777:20170329182209p:plain

ストリーミングとVLCPowerShell。詰まったところ。

CSRA「STATION LIST」>「東北」にある「放送を聞く」をクリックすると、ASXファイルがダウンロードされて、それを読み込んだWindows Media PlayerVLC Media Playerなどがストリーミングを受信する。

このASXファイルをテキストエディタなどで開くと、ストリーミングがなされているURLが記述してある。このURLをVLCに直接引数として渡せば、再生される。で、VLCはストリーミングの録音・録画もかんたんにできる。

URLが変更になったら、スクリプトも書き換えなければならない。ASXファイルを直接読みに行くように改造する必要があるかも。

PowerShellの書き方については下記記事が参考になった。ありがとうございます:

PowerShellで詰まったところ:Functionの返り値がオブジェクト配列になってしまう問題。

たとえば、こういう部分:

function getNextCast{
  if ($yobi -eq "土曜日") {
    echo "次回は3日後の火曜日"
    [DateTime]$val = (Get-Date $date.AddDays(3) -Hour 17 -Minute 44 -Second 30)
    return $val
  } elseif ($yobi -eq "日曜日") {
以下略

これ、普通に考えると、DateTime型のオブジェクトが返ってくると思うじゃないですか。しかしながら、関数内にechoがあると、その出力もまとめて返してくる。結果として、オブジェクト配列がリターンされる。ここで詰まった。echoの行をコメントアウトして解決。

ばいにー。