Last active
December 31, 2023 05:11
-
-
Save booska/ce06605ccb9d7ba9f1cfc2184935a0bb to your computer and use it in GitHub Desktop.
らじる★らじるを録音するWSHです。 おまけでOTTAVA,Suono Dolce,超!A&G+,JCBA各局,CSRA各局(一部不可),AFNも録音できます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
※重要 お知らせ | |
このスクリプトは各サイマルラジオの仕様変更に追従しておりません。 | |
時間が有る時に、動くコードに変更します。 | |
らじる★らじるを録音するWSHです。おまけでOTTAVA,Suono Dolce,超!A&G+,JCBA各局,CSRA各局(一部不可),AFNも録音できます。 | |
録音はFFmpeg(A&GのみRTMPDump)で行います。当該RajiruRec.vbsはそれをキックするランチャーです。 | |
コマンドプロンプトで利用する形態で、超軽量級ですのでパソコン作業の邪魔にはほとんどなりません。 | |
落書き人はこれをタスクスケジューラに仕込んで留守録を行っています。タスクスケジューラの使い方と覚えると色々と便利です。 | |
録音途中で通信が途切れるなどで中断した場合には、自動的に再接続を試みる様になっています。 | |
配信URL設定の確認の為に簡易聴取もできます。 | |
※重要:GitHUBからダウンロードしたらShift-JISに変換して下さい。 | |
Windowsで利用するWSHの文字コードはShift-JISです。GitHUBデフォルトはUTF-8みたいです。 | |
文字コードの変換は、変換機能をもった適当なテキスト エディタで行えば簡単です。 | |
1.導入・・・という程じゃないですが | |
適当なフォルダを作成して以下のようにサブフォルダとファイルを配置してください。 | |
├ RajiruRec.vbs ※当該スクリプトファイルです。 | |
├ bin ※binフォルダを作成して、以下のプログラムをこのフォルダに置いてください。 | |
│ ├ rtmpdump.exe ※入手先 *1 ※超A&G!を録音しないなら不要 | |
│ ├ ffmpeg.exe ※入手先 *2 | |
│ └ ffplay.exe ※入手先 *2 ※簡易聴取しないなら不要 | |
└ rec 録音ファイルを収めるフォルダ、録音の引数で任意に変えられる。 | |
*1:RTMPDumpの入手先 | |
RTMPDump公式サイト http://rtmpdump.mplayerhq.hu/ | |
*2:FFmpeg,FFplayの最新版の入手先 | |
FFMpeg公式サイト http://ffmpeg.org/ | |
2.動かし方 | |
(1). 動作環境 | |
作成はWindows 7 Pro環境で行っています。Windows 10 Home環境でも動作しています。 | |
この落書き人は上記以外の環境で当該RajiruRec.vbsを動かすことは有りません。よって他の環境での動作可否は感知できません。 | |
(2). コマンドラインの仕様 | |
例 cscript RadikoRec.vbs JOAK 1:00:00 rec\ テスト no | |
例 cscript RadikoRec.vbs /i:JOAK /t:1:00:00 /d:rec\ /o:テスト /s:no | |
例 cscript RadikoRec.vbs /i:JOAK /t:1:00:00 /d:rec\ /o:テスト /s:no /mail:yes /sendto:[email protected] /smtp:hogehoge.jp | |
例 cscript RadikoRec.vbs /i:JOAK /t:1:00:00 /d:rec\ /o:テスト /s:no /mail:att /sendto:[email protected] /smtp:hogehoge.jp | |
NHKラジオ第一を、1時間、recというサブフォルダに、テストというファイル名で録音するという意味です。 | |
なお、ファイル名の接頭辞に録音日時が自動的に付加されます。リトライが発生すると接尾辞にリトライ回数が付加されます。 | |
3番目は録音完了をメールで通知している。4番目は録音完了したファイルをメールに添付して通知している。 | |
詳細はRajiruRec.vbsのソースコードを読んで下さい。 | |
例 cscript RadikoRec.vbs JOAK /p:yes | |
NHKラジオ第一をFFplayで聴くことができます。 | |
3.ライセンス | |
コピーレフトです。フォークは自由です。 | |
4.サポート | |
このスクリプトは参考として公開しているもので、落書き人が想定していない環境での動作や要望など、いかなるサポートも行えません。 | |
なお録音失敗等の如何なる損害が発生しても、このスクリプトの落書き人は苦情などを一切受け付けません。 | |
5.変遷 | |
・2011-吉日 らじる★らじるの録音スクリプトを公開 | |
・2012-08-吉日 超!A&G+の録音に対応 | |
・2012-09-吉日 超!A&G+の録音を調整 | |
・2012-09-吉日 Suono Dolceの録音に対応 | |
・2012-10-吉日 超!A&G+の録音を調整 | |
・2013-06-吉日 超!A&G+の録音を調整(配信が安定した) | |
・2013-07-吉日 JCBA各局の録音に対応 | |
・2013-07-吉日 OTTAVAとCSRA(局設定はサンプルとして数局のみ*4)の録音に対応 | |
・2013-08-03 録音ファイルをメール通知機能を実装 *5 | |
・2013-08-05 radiko.jpのHLS配信の録音を試作したが非公開、陽の目を見る事ができる日が来ますように m(゚- ゚ ) | |
・2013-09-16 GPLで非公開は矛盾するとの指摘を受け、上記のradiko.jp対応部分は抹消しました。 | |
・2014-02-02 AFNの録音に対応 | |
・2014-02-07 AFNの録音に対応の記述ミスを訂正 | |
・2014-12-11 超!A&G+の配信変更に対応 | |
・2015-01-01 OTTAVA新プレイヤーの録音に対応 ※旧プレイヤーは停止するらしい | |
・2015-01-12 OTTAVA新プレイヤーの録音の間違いを訂正 | |
・2015-01-12 AFNの配信URLを訂正 ※時々変更になります | |
・2015-02-18 超!A&G+の配信変更に対応 | |
・2016-11-xx 配信URL変更で不具合が出ていたが多忙で放置なので非公開へ *6 | |
・2017-09-03 らじる等の配信方法が変更された為に改修 | |
・2017-09-03 設定URL確認の為に簡易聴取機能を追加(プレイヤーとしては不満足) | |
・2017-09-09 改修にて不具合解消(検証は落書き人が使う範囲のみ)した事から再公開 | |
・2017-09-19 らじるのURLが一部旧のままでしたので訂正 | |
・2017-09-19 CSRAの本日調べた局を追加(FFplayで再生できない局とwma以外の局は除外) | |
・2017-10-14 FM++とListenRadioを追加 ※CSRAやJCBAと重複する場合は「/type:FMPLUS」もしくは「/type:LISR」を指定する | |
・2017-11-07 FM++とListenRadioに追加された3局を加える | |
・2017-11-07 らじるがm4aコンテナでは再生できない場合があり*7、mp4コンテナに変更 | |
・2018-03-20 FM++を除外(WSHでは対応出来なくなっていた為) | |
・2018-03-20 CSRAから配信停止している局を除外 | |
・2018-03-20 ※今後の放送局リスト保守は落書き人が録音する局のみで基本放置!! | |
*4:CSRAなどの録音URLの調べ方 | |
6-(1).録音URLの調べ方を参照 | |
*5:メール通知について | |
この機能は自分が欲しかった機能ですが、以下の理由により万人向けではありません。 | |
メール送信できるかは環境依存です。例えばOSがHome EditionなどではOSライセンスの制限により使えません。 | |
録音したファイルを添付して送信することも可能ですが、SMTPサーバーの添付ファイルサイズ制限で送信できないことがあります。 | |
*6:多忙で放置モードになったら非公開にします。 | |
ググって不具合放置状態なゴミが検索一覧に表示されるのが嫌なので ^_^; | |
*7:らじるのコーデックが風変わりなHE-AACv2の場合がある | |
常にそうであるのでは無く、HE-AACの場合もあるので困る。 | |
これが頻繁に続く様なら、常に再エンコードした方が良いのかもしれない。 | |
落書き人は保存目的ではなく聴ければ良いので、取り敢えず再エンコードなし。 | |
ID : 1 | |
Format : AAC | |
Format/Info : Advanced Audio Codec | |
Format profile : HE-AACv2 / HE-AAC / LC | |
Codec ID : 40 | |
Duration : 1mn 0s | |
Bit rate mode : Constant | |
Bit rate : 48.0 Kbps | |
Channel(s) : 2 channels / 2 channels / 2 channels ←何これ?(・・;) | |
Channel positions : Front: L R / Front: L R / Front: L R | |
Sampling rate : 48.0 KHz / 48.0 KHz / 24.0 KHz | |
Compression mode : Lossy | |
6.参考情報 | |
(1). 録音URLの調べ方 (ストリーミング配信のパケットが読める基礎知識が必要) | |
まずはgoogleで検索して、先人者が調べたものがあれば、それを利用すれば良いかと思います。 | |
Wireshakなどの通信パケットを調べるソフトで、ストリーミング開始リクエストURLが調べられます。 | |
なお、パケットの授受についての知識が必要ですので、多少、難しいかもしれません。 | |
例えば、CSRAならばRTSP形式ですので、そのリクエストパケットのURLがそうです。 | |
RTSPのリクエスト開始はHTTPと同じである場合がありますので、一見するとHTTPの様に見えます。 | |
またCSRAの場合は複数IPアドレスがラウンドロビンされている局がありますので、通信開始時に複数IPアドレスに対してリクエストしている様に見えて混乱しないようにする必要もあります。 | |
簡易にはVLC media playerで再生できる配信サイトなら、VLCでメディア情報を参照することでも調べられます。 | |
(2). 音声コーデックは無変換です | |
コーデックは無変換ですので、録音時の音質劣化はありません。 | |
コンテナも、そのコーデックに適した最もスタンダードな物にしてあります。 | |
もし再エンコードしてコーデックとコンテナを統一したいなら、ffmpegのオプションと出力ファイルの拡張子をセットしている箇所を変更して下さい。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'RajiruRec.vbsは、 | |
' らじる★らじるを録音するWSHです。 | |
' おまけでOTTAVA,Suono Dolce,超!A&G+,JCBA各局,CSRA各局(一部不可),AFNも録音できます。 | |
' | |
' 起動書式例(引数を順番に指定) cscript RajiruRec.vbs JOAK 2:02:00 "c:\temp\" NHK深夜便 No | |
' 起動書式例(名前付き引数で指定) cscript RajiruRec.vbs /i:JOAK /t:2:02:00 /d:"c:\temp\" /o:NHK深夜便 /s:No | |
' 起動書式例(聴取したい場合) cscript RajiruRec.vbs JOAK /p:yes | |
' ※詳しくは、コマンドラインの引数取得の箇所を参照のこと | |
Option Explicit | |
Dim i,j | |
'タスクスケジューラで休止モードから復帰させた場合にNet接続までのマージン確保(これが不用な環境はらコメントアウトする) | |
'WScript.Sleep(1000 * 5) 'スリープさせる秒数は環境により調整が必要 | |
'引数の取得 | |
Dim argStation,argRecTime,argDirectory,argOut,argType,argPlay,argSleep,argDebug,argSilent,argMail,argSendTo,argSMTP | |
argStation = "JOAK" '引数1(i):放送局指定(サイマル各局はコールサイン,ネット配信専門局はOTTAVA,Suono,AGの3局) | |
argRecTime = "00:30:00" '引数2(t):録音時間 | |
argDirectory = "" '引数3(d):録音ファイルを出力するディレクトリ | |
argOut = "out" '引数4(o):録音ファイル名 | |
argSleep = "no" '引数5(s):録音後にスリープさせるなら“yes” | |
argType = "" '引数(type):“”コールサインのみで検索、“CSRA”CSRAから検索、“JCBA”JCBAから検索、“LISR”ListenRadioから検索、“FMPLUS”FM++から検索 | |
argPlay = "no" '引数(p):“yes”なら録音ではなく聴取 | |
argDebug = "no" '引数(deb):“yes”なら、動作の途中経過を逐次表示する | |
argSilent = "yes" '引数(cilent):“yes”なら、外部コマンドであるwgetやrtmpdumpの実行プロンプトを表示しない | |
argMail = "no" '引数(mail):“yes”なら録音完了をメールで通知する。"att"なら録音ファイルを添付いたメールで送信する。なお大きなファイル添付は受信できない環境が多々有り、実用的ではないので注意のこと。 | |
argSendTo = "" '引数(sendto):メール通知する宛先 ex. [email protected] | |
argSMTP = "" '引数(smtp):"メールボックスがあるSMTPサーバーのホスト名 ex. hogehoge.jp | |
Dim aNamed, aUnnamed | |
Set aNamed = WScript.Arguments.Named | |
Set aUnnamed = WScript.Arguments.Unnamed | |
If aUnnamed.Count > 0 Then | |
For i = 0 To aUnnamed.Count - 1 | |
Select Case i | |
Case 0 | |
argStation = aUnnamed.Item(i) | |
Case 1 | |
argRecTime = aUnnamed.Item(i) | |
Case 2 | |
argDirectory = aUnnamed.Item(i) | |
Case 3 | |
argOut = aUnnamed.Item(i) | |
Case 4 | |
argSleep = aUnnamed.Item(i) | |
End Select | |
Next | |
End If | |
If aNamed.Exists("i") Then argStation = aNamed.Item("i") | |
If aNamed.Exists("t") Then argRecTime = aNamed.Item("t") | |
If aNamed.Exists("d") Then argDirectory = aNamed.Item("d") | |
If aNamed.Exists("o") Then argOut = aNamed.Item("o") | |
If aNamed.Exists("p") Then argPlay = LCase(aNamed.Item("p")) | |
If aNamed.Exists("s") Then argSleep = LCase(aNamed.Item("s")) | |
If aNamed.Exists("type") Then argType = UCase(aNamed.Item("type")) | |
If aNamed.Exists("deb") Then argDebug = LCase(aNamed.Item("deb")) | |
If aNamed.Exists("silent") Then argSilent = LCase(aNamed.Item("silent")) | |
If aNamed.Exists("mail") Then argMail = LCase(aNamed.Item("mail")) | |
If aNamed.Exists("sendto") Then argSendTo = LCase(aNamed.Item("sendto")) | |
If aNamed.Exists("smtp") Then argSMTP = LCase(aNamed.Item("smtp")) | |
'メール通知の引数チェック | |
If argMail = "yes" or argMail = "att" Then | |
If argSendTo = "" Then | |
WScript.Echo "warning : メール宛先が指定されていない為、メール通知をオフにしました。" | |
argMail = "no" | |
End If | |
If argSMTP = "" Then | |
WScript.Echo "warning : メール送信先のSMTPサーバーが指定されていない為、メール通知をオフにしました。" | |
argMail = "no" | |
End If | |
End If | |
If argPlay = "no" Then | |
WScript.Echo "「" & argStation & "」の「" & argOut & "」を録音開始、録音時間は「" & argRecTime & "」" | |
End IF | |
'引数で指定の録音時間を日時属性に変換 | |
dim RecTime | |
RecTime = TimeValue(argRecTime) | |
'録音終了日時を求める | |
Dim BeginDate | |
Dim EndDate | |
EndDate = Now() + RecTime | |
'シェル起動オブジェクトを生成 | |
Dim WSHShell,gShellStyle | |
Set WSHShell = WScript.CreateObject("WScript.Shell") | |
If argSilent = "yes" Then | |
gShellStyle = 7 | |
Else | |
gShellStyle = 10 | |
End IF | |
'ファイルシステム用オブジェクトを生成(ラジコ独自認証でファイルを利用) | |
Dim WSHFS | |
Set WSHFS = CreateObject("Scripting.FileSystemObject") | |
'NHKのStreaming URLの連想配列 | |
Dim aaNHK | |
Set aaNHK = WScript.CreateObject("Scripting.Dictionary") | |
aaNHK.Add "r1","https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8" 'R1東京 | |
aaNHK.Add "r2","https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8" 'R2東京 | |
aaNHK.Add "fm","https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8" 'FM東京 | |
aaNHK.Add "JOIK","https://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8" 'R1札幌 | |
aaNHK.Add "JOAB","https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8" 'R2東京 | |
aaNHK.Add "JOAK","https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8" 'R1東京 | |
aaNHK.Add "JOHK","https://nhkradiohkr1-i.akamaihd.net/hls/live/512075/1-r1/1-r1-01.m3u8" 'R1仙台 | |
aaNHK.Add "JOCK","https://nhkradiockr1-i.akamaihd.net/hls/live/512072/1-r1/1-r1-01.m3u8" 'R1名古屋 | |
aaNHK.Add "JOBK","https://nhkradiobkr1-i.akamaihd.net/hls/live/512291/1-r1/1-r1-01.m3u8" 'R1大阪 | |
aaNHK.Add "JOFK","https://nhkradiofkr1-i.akamaihd.net/hls/live/512086/1-r1/1-r1-01.m3u8" 'R1広島 | |
aaNHK.Add "JOZK","https://nhkradiozkr1-i.akamaihd.net/hls/live/512103/1-r1/1-r1-01.m3u8" 'R1松山 | |
aaNHK.Add "JOLK","https://nhkradiolkr1-i.akamaihd.net/hls/live/512088/1-r1/1-r1-01.m3u8" 'R1福岡 | |
aaNHK.Add "JOIK-FM","https://nhkradioikfm-i.akamaihd.net/hls/live/512100/1-fm/1-fm-01.m3u8" 'FM札幌 | |
aaNHK.Add "JOAK-FM","https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8" 'FM東京 | |
aaNHK.Add "JOHK-FM","https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8" 'FM仙台 | |
aaNHK.Add "JOCK-FM","https://nhkradiockfm-i.akamaihd.net/hls/live/512074/1-fm/1-fm-01.m3u8" 'FM名古屋 | |
aaNHK.Add "JOBK-FM","https://nhkradiobkfm-i.akamaihd.net/hls/live/512070/1-fm/1-fm-01.m3u8" 'FM大阪 | |
aaNHK.Add "JOFB-FM","https://nhkradiofkfm-i.akamaihd.net/hls/live/512087/1-fm/1-fm-01.m3u8" 'FM広島 | |
aaNHK.Add "JOZK-FM","https://nhkradiozkfm-i.akamaihd.net/hls/live/512106/1-fm/1-fm-01.m3u8" 'FM松山 | |
aaNHK.Add "JOLK-FM","https://nhkradiolkfm-i.akamaihd.net/hls/live/512097/1-fm/1-fm-01.m3u8" 'FM福岡 | |
'JCBAのStation IDの連想配列 ※JCBAはStreaming URLの統一感があって良いですね | |
Dim aaJCBA | |
Set aaJCBA = WScript.CreateObject("Scripting.Dictionary") | |
aaJCBA.Add "JOZZ1AZ-FM","JCB001" 'FMはな | |
aaJCBA.Add "JOZZ1AR-FM","JCB002" 'エフエムもえる | |
aaJCBA.Add "JOZZ1AU-FM","JCB003" 'Airてっし | |
aaJCBA.Add "JOZZ2AR-FM","JCB004" 'アップルウェーブ | |
aaJCBA.Add "JOZZ2BA-FM","JCB005" 'FM One | |
aaJCBA.Add "JOZZ2AA-FM","JCB006" 'ラジオモンスター | |
aaJCBA.Add "JOZZ2BE-FM","JCB007" 'エフエムNCVおきたまGO! | |
aaJCBA.Add "JOZZ2AK-FM","JCB009" 'ハーバーRADIO | |
aaJCBA.Add "JOZZ2BK-FM","JCB008" 'エフエムい~じゃん おらんだラジオ | |
aaJCBA.Add "JOZZ2AC-FM","JCB010" 'FMポコ | |
aaJCBA.Add "JOZZ2AJ-FM","JCB011" 'エフエムいわぬま | |
aaJCBA.Add "JOZZ2AZ-FM","JCB012" 'H@!FM | |
aaJCBA.Add "JOZZ2AU-FM","JCB013" '喜多方シティエフエム | |
aaJCBA.Add "JOZZ3AC-FM","JCB014" 'FM湘南ナパサ | |
aaJCBA.Add "JOZZ3AD-FM","JCB015" 'FM・ブルー湘南 | |
aaJCBA.Add "JOZZ3BM-FM","JCB017" 'FMおだわら | |
aaJCBA.Add "JOZZ3AF-FM","JCB016" 'KamakuraFM | |
aaJCBA.Add "JOZZ3CI-FM","JCB018" '湘南マジックウェイブ | |
aaJCBA.Add "JOZZ3AM-FM","JCB019" 'FMチャッピー | |
aaJCBA.Add "JOZZ3AY-FM","JCB020" 'I & U-LaLa FM | |
aaJCBA.Add "JOZZ3AH-FM","JCB021" 'かずさFM | |
aaJCBA.Add "JOZZ3BZ-FM","JCB022" 'ラジオ成田 | |
aaJCBA.Add "JOZZ3BY-FM","JCB023" 'FMだいご | |
aaJCBA.Add "JOZZ3BD-FM","JCB024" 'FMかしま | |
aaJCBA.Add "JOZZ3AO-FM","JCB025" 'エフエム甲府 | |
aaJCBA.Add "JOZZ3CA-FM","JCB026" 'エフエムふじやま | |
aaJCBA.Add "JOZZ3CF-FM","JCB027" 'エフエムふじごこ | |
aaJCBA.Add "JOZZ3AQ-FM","JCB028" 'ラジオ高崎 | |
aaJCBA.Add "JOZZ3BB-FM","JCB029" 'エフエム太郎 | |
aaJCBA.Add "JOZZ3AT-FM","JCB030" 'FM OZE | |
aaJCBA.Add "JOZZ3AU-FM","JCB031" 'エフエム西東京 | |
aaJCBA.Add "JOZZ3AG-FM","JCB032" 'むさしのFM | |
aaJCBA.Add "JOZZ3AS-FM","JCB033" 'FMえどがわ | |
aaJCBA.Add "JOZZ6AB-FM","JCB034" 'FM Haro! | |
aaJCBA.Add "JOZZ6BE-FM","JCB035" 'みらいずステーション | |
aaJCBA.Add "JOZZ6AY-FM","JCB036" 'g-sky76.5 | |
aaJCBA.Add "JOZZ6BF-FM","JCB037" '富士山GOGOエフエム | |
aaJCBA.Add "JOZZ6AD-FM","JCB038" 'VOICE CUE | |
aaJCBA.Add "JOZZ6AC-FM","JCB039" 'マリンパル | |
aaJCBA.Add "JOZZ6AG-FM","JCB040" 'FM-Hi! | |
aaJCBA.Add "JOZZ6AS-FM","JCB041" 'Radio-f | |
aaJCBA.Add "JOZZ6AL-FM","JCB042" 'COAST-FM | |
aaJCBA.Add "JOZZ6AK-FM","JCB043" 'FM PiPi | |
aaJCBA.Add "JOZZ6AP-FM","JCB044" 'FMわっち | |
aaJCBA.Add "JOZZ6AE-FM","JCB045" 'Hits FM | |
aaJCBA.Add "JOZZ6AV-FM","JCB046" 'United North | |
aaJCBA.Add "JOZZ6AT-FM","JCB047" 'RADIO SANQ | |
aaJCBA.Add "JOZZ6BB-FM","JCB048" 'i-wave 76.5 FM | |
aaJCBA.Add "JOZZ6BC-FM","JCB049" 'エフエム ななみ | |
aaJCBA.Add "JOZZ6BG-FM","JCB050" 'FMいなべ(いなBee) | |
aaJCBA.Add "JOZZ6AU-FM","JCB051" 'なばステ | |
aaJCBA.Add "JOZZ4AE-FM","JCB052" 'RADIO AGATT | |
aaJCBA.Add "JOZZ4AH-FM","JCB053" 'FMながおか | |
aaJCBA.Add "JOZZ4AF-FM","JCB054" 'FMゆきぐに | |
aaJCBA.Add "JOZZ4AO-FM","JCB055" 'エルシーブイFM | |
aaJCBA.Add "JOZZ4AM-FM","JCB056" 'i ステーション | |
aaJCBA.Add "JOZZ5AF-FM","JCB057" 'City-FM | |
aaJCBA.Add "JOZZ5AE-FM","JCB058" 'ラジオたかおか | |
aaJCBA.Add "JOZZ5AH-FM","JCB059" 'エフエムとなみ | |
aaJCBA.Add "JOZZ5AD-FM","JCB060" 'ラジオななお | |
aaJCBA.Add "JOZZ5AB-FM","JCB061" 'ラジオかなざわ | |
aaJCBA.Add "JOZZ5AC-FM","JCB062" 'ラジオこまつ | |
aaJCBA.Add "JOZZ7BG-FM","JCB063" 'ロケッツ785 | |
aaJCBA.Add "JOZZ7AM-FM","JCB064" 'FMいかる | |
aaJCBA.Add "JOZZ7BN-FM","JCB066" 'FMまいづる | |
aaJCBA.Add "JOZZ7AD-FM","JCB065" 'FMうじ | |
aaJCBA.Add "JOZZ7AP-FM","JCB067" 'FMちゃお | |
aaJCBA.Add "JOZZ7AK-FM","JCB068" 'ウメダFM Be Happy! 789 | |
aaJCBA.Add "JOZZ7AA-FM","JCB069" 'FM-HANAKO | |
aaJCBA.Add "JOZZ7AJ-FM","JCB070" 'ハッピーエフエムいたみ | |
aaJCBA.Add "JOZZ7AT-FM","JCB071" 'ハミングFM宝塚 | |
aaJCBA.Add "JOZZ7AN-FM","JCB072" 'さくらFM | |
aaJCBA.Add "JOZZ7AS-FM","JCB073" 'ならどっとFM | |
aaJCBA.Add "JOZZ7AR-FM","JCB074" 'FMハイホー | |
aaJCBA.Add "JOZZ7BE-FM","JCB075" 'Banana FM | |
aaJCBA.Add "JOZZ8AD-FM","JCB079" 'Radio momo | |
aaJCBA.Add "JOZZ9AI-FM","JCB077" 'FMがいや | |
aaJCBA.Add "JOZZ9AH-FM","JCB076" 'FMラヂオバリバリ | |
aaJCBA.Add "JOZZ8AA-FM","JCB078" 'レディオBINGO | |
aaJCBA.Add "JOZZ8AC-FM","JCB080" 'FMくらしき | |
aaJCBA.Add "JOZZ8AF-FM","JCB081" 'エフエムおのみち | |
aaJCBA.Add "JOZZ8AG-FM","JCB082" 'FMちゅーピー | |
aaJCBA.Add "JOZZ8AP-FM","JCB083" 'FMはつかいち | |
aaJCBA.Add "JOZZ8AE-FM","JCB084" 'COME ON! FM | |
aaJCBA.Add "JOZZ8AJ-FM","JCB085" 'しゅうなんエフエム | |
aaJCBA.Add "JOZZ0BY-FM","JCB086" 'FM八女 | |
aaJCBA.Add "JOZZ8AU-FM","JCB087" 'FM東広島 | |
aaJCBA.Add "JOZZ0BU-FM","JCB088" 'ゆふいんラヂオ局 | |
aaJCBA.Add "JOZZ0AX-FM","JCB089" 'NOAS FM | |
aaJCBA.Add "JOZZ0AE-FM","JCB090" 'かっぱFM | |
aaJCBA.Add "JOZZ0AB-FM","JCB091" 'FM791 | |
aaJCBA.Add "JOZZ0BN-FM","JCB092" 'FMからつ | |
aaJCBA.Add "JOZZ0AI-FM","JCB093" 'Dreams FM | |
aaJCBA.Add "JOZZ4AD-FM","JCB094" 'FM KENTO | |
aaJCBA.Add "JOZZ4AJ-FM","JCB095" 'FM-J | |
aaJCBA.Add "JOZZ3AR-FM","JCB096" 'FMやまと | |
aaJCBA.Add "JOZZ7BP-FM","JCB097" 'FM五條 | |
aaJCBA.Add "JOZZ3CJ-FM","JCB098" '発するFM | |
aaJCBA.Add "JOZZ9AJ-FM","JCB099" '新居浜FM放送 | |
aaJCBA.Add "JOZZ3CH-FM","JCB100" 'FMふくろう | |
'CSRAのStreaming URLの連想配列 | |
' ※CSRAサイトからFM++やListenRadioへのリンクになっている局、icyで配信している局、mmsだがFFplayで再生できない局は除いてあります。 | |
Dim aaCSRA | |
Set aaCSRA = WScript.CreateObject("Scripting.Dictionary") | |
aaCSRA.Add "JOZZ1AT-FM","mmsh://hdv4.nkansai.tv/eniwa?MSWMExt=.asf" 'e-niwa | |
aaCSRA.Add "JOZZ1AH-FM","mmsh://fmwappy.aa0.netvolante.jp:8080" 'FMわっぴー | |
aaCSRA.Add "JOZZ1AC-FM","mmsh://simuledge.shibapon.net/FmKushiro?MSWMExt=.asf" 'エフエムくしろ | |
aaCSRA.Add "JOZZ1BB-FM","rtsp://wm2.hvc.co.jp/radioniseko" 'ラジオニセコ | |
aaCSRA.Add "JOZZ1AK-FM","rtsp://wm2.hvc.co.jp/sankakuyama" '三角山放送局 | |
aaCSRA.Add "JOZZ1AG-FM","mmsh://simuledge.shibapon.net/fm837?MSWMExt=.asf" 'FMおたる | |
aaCSRA.Add "JOZZ1AJ-FM","mmsh://202.241.170.47:8080/" 'FMアップル | |
aaCSRA.Add "JOZZ1AI-FM","rtsp://hdv2.nkansai.tv/radiokaros" 'ラジオカロスサッポロ | |
aaCSRA.Add "JOZZ1AA-FM","rtsp://hdv.nkansai.tv/iruka" 'FMいるか | |
aaCSRA.Add "JOZZ1AX-FM","rtsp://wm2.hvc.co.jp/radioniseko" 'エフエムしろいし | |
aaCSRA.Add "JOZZ1AB-FM","mmsh://simuledge.shibapon.net/fm837?MSWMExt=.asf" 'FMりべーる | |
aaCSRA.Add "JOZZ2AL-FM","mmsh://hdv3.nkansai.tv/befm?MSWMExt=.asf" 'Be FM | |
aaCSRA.Add "JOZZ2AI-FM","mmst://simul.freebit.net/radiomorioka" 'ラヂオもりおか | |
aaCSRA.Add "JOYZ2AK-FM","mmsh://hdv2.nkansai.tv/rikutakata" '陸前高田災害FM | |
aaCSRA.Add "JOZZ2BI-FM","mmsh://hdv2.nkansai.tv/miyako" 'みやこハーバーラジオ | |
aaCSRA.Add "JOZZ2AB-FM","mmst://simul.freebit.net/radio3" 'RADIO3 | |
aaCSRA.Add "JOZZ2AG-FM","mmsh://hdv2.nkansai.tv/ishinomaki" 'ラジオ石巻 | |
aaCSRA.Add "JOZZ2AF-FM","mmsh://hdv2.nkansai.tv/baywave" 'BAY WAVE | |
aaCSRA.Add "JOZZ2AY-FM","mmsh://hdv5.nkansai.tv/taihaku?MSWMExt=.asf" 'FMたいはく | |
aaCSRA.Add "JOZZ2AP-FM","http://www.fm797.co.jp/mf/bcs_na.mp3" 'fmいずみ | |
aaCSRA.Add "JOZZ2BL-FM","mmsh://hdv2.nkansai.tv/natori" 'なとらじ801 | |
aaCSRA.Add "JOZZ2AN-FM","mmsh://hdv3.nkansai.tv/yutopia" 'FMゆーとぴあ | |
aaCSRA.Add "JOZZ2BC-FM","mmsh://hdv3.nkansai.tv/yokote" '横手かまくらFM | |
aaCSRA.Add "JOZZ2BH-FM","mmsh://hdv3.nkansai.tv/kiritampo" '鹿角きりたんぽFM | |
aaCSRA.Add "JOZZ2AE-FM","mmsh://hdv2.nkansai.tv/seawave" 'SEA WAVE FMいわき | |
aaCSRA.Add "JOZZ2AD-FM","mmsh://hdv3.nkansai.tv/aizu" 'FM愛'S | |
aaCSRA.Add "JOZZ2AW-FM","mmsh://hdv2.nkansai.tv/fmmotcom" 'FM-MotCom | |
aaCSRA.Add "JOYZ2AF-FM","mmsh://hdv2.nkansai.tv/minamisoma" '南相馬ひばりFM | |
aaCSRA.Add "JOZZ3AN-FM","mmsh://hdv4.nkansai.tv/palulun?MSWMExt=.asf" 'FMぱるるん | |
aaCSRA.Add "JOZZ3BX-FM","mmsh://hdv3.nkansai.tv/takahagi" 'たかはぎFM | |
aaCSRA.Add "JOZZ3BU-FM","mmsh:/hdv5.nkansai.tv/hitachi" 'FMひたち | |
aaCSRA.Add "JOZZ3BO-FM","mmsh://hdv4.nkansai.tv/tsukuba" 'ラヂオつくば | |
aaCSRA.Add "JOZZ3CC-FM","mmsh://hdv4.nkansai.tv/fmuu" 'FM-UU | |
aaCSRA.Add "JOZZ3BN-FM","mmst://simuledge.shibapon.net/kiryu.fm" 'エフエムきりゅう | |
aaCSRA.Add "JOZZ3BV-FM","rtsp://radio.maebashi.fm:80/mwave" 'M-WAVE | |
aaCSRA.Add "JOZZ3BK-FM","mmsh://hdv.nkansai.tv/smile" 'すまいるエフエム | |
aaCSRA.Add "JOZZ3AV-FM","rtsp://flower-tv.net/simul" 'フラワーラジオ | |
aaCSRA.Add "JOZZ3CD-FM","mmsh://hdv4.nkansai.tv/kawaguchi?MSWMExt=.asf" 'FM Kawaguchi | |
aaCSRA.Add "JOZZ3BI-FM","mmsh://hdv.nkansai.tv/redswave" 'REDS WAVE | |
aaCSRA.Add "JOZZ3AP-FM","mmsh://hdv3.nkansai.tv/katsushika" 'かつしかFM | |
aaCSRA.Add "JOZZ3BF-FM","mmsh://hdv3.nkansai.tv/rainbowtown" 'レインボータウンFM | |
aaCSRA.Add "JOZZ3AW-FM","mmsh://hdv3.nkansai.tv/chofu" '調布FM | |
aaCSRA.Add "JOZZ3AX-FM","mmsh://hdv.nkansai.tv/radiocity" 'Ginza'RADIO CITY | |
aaCSRA.Add "JOZZ3BL-FM","mmsh://hdv3.nkansai.tv/tachikawa?MSWMExt=.asf" 'エフエムたちかわ | |
aaCSRA.Add "JOZZ3AK-FM","mmsh://hdv3.nkansai.tv/kawasaki" 'かわさきFM | |
aaCSRA.Add "JOZZ3AI-FM","mmst://simul.freebit.net/radioshonan" 'レディオ湘南 | |
aaCSRA.Add "JOZZ3BQ-FM","mmsh://hdv3.nkansai.tv/totsuka?MSWMExt=.asf" 'FM TOTSUKA | |
aaCSRA.Add "JOZZ3AL-FM","rtsp://122.29.249.8/fmsagami_simul" 'FM HOT 839 | |
aaCSRA.Add "JOZZ3BE-FM","mmsh://210.253.220.164" 'FM salus | |
aaCSRA.Add "JOZZ3BW-FM","mmsh://hdv.nkansai.tv/kaon" 'エフエムカオン | |
aaCSRA.Add "JOZZ5AG-FM","mmsh://hdv4.nkansai.tv/radiomyu" 'ラジオ・ミュー | |
aaCSRA.Add "JOZZ5AA-FM","mmsh://android.fmn1.jp/live/?MSWMExt=.asf" 'えふえむ・エヌ・ワン | |
aaCSRA.Add "JOZZ4AQ-FM","mmsh://hdv.nkansai.tv/azumino" 'エフエムあづみ野 | |
aaCSRA.Add "JOZZ4AG-FM","mmsh://hdv.nkansai.tv/sakudaira" 'FMさくだいら | |
aaCSRA.Add "JOZZ4AL-FM","mmsh://hdv2.nkansai.tv/karuizawa" 'エフエム軽井沢 | |
aaCSRA.Add "JOZZ6AM-FM","mmst://simul.freebit.net/ciao" 'Ciao! | |
aaCSRA.Add "JOZZ6BD-FM","mmsh://hdv4.nkansai.tv/izunokuni?MSWMExt=.asf" 'FMいずのくに | |
aaCSRA.Add "JOZZ6AX-FM","mmsh://simuledge.shibapon.net/mid-fm761?MSWMExt=.asf" 'MID-FM761 | |
aaCSRA.Add "JOZZ6AF-FM","mmsh://simuledge.shibapon.net/FmOkazaki?MSWMExt=.asf" 'FMおかざき | |
aaCSRA.Add "JOZZ6AO-FM","mmsh://hdv3.nkansai.tv/toyota?MSWMExt=.asf" 'RADIO LOVEAT | |
aaCSRA.Add "JOZZ6AN-FM","mmsh://hdv4.nkansai.tv/portwave" 'CTY-FM | |
aaCSRA.Add "JOZZ6AZ-FM","mmsh://hdv4.nkansai.tv/suzuka?MSWMExt=.asf" 'Suzuka Voice FM | |
aaCSRA.Add "JOZZ7BF-FM","mmsh://211.1.40.29/tanba" 'FM丹波 | |
aaCSRA.Add "JOZZ7BH-FM","mmsh://hdv4.nkansai.tv/tango" 'FMたんご | |
aaCSRA.Add "JOZZ7AY-FM","mmsh://hdv3.nkansai.tv/radiocafe" '京都三条ラジオカフェ | |
aaCSRA.Add "JOZZ7AB-FM","mmsh://simuledge.shibapon.net/KyotoLivingFM?MSWMExt=.asf" 'FM845 | |
aaCSRA.Add "JOZZ7BO-FM","mmsh://hdv5.nkansai.tv/radiomixkyoto" 'RADIO MIX KYOTO | |
aaCSRA.Add "JOZZ7AG-FM","mmsh://hdv4.nkansai.tv/hirakata" 'エフエムひらかた | |
aaCSRA.Add "JOZZ7AF-FM","mmsh://hdv3.nkansai.tv/yesfm" 'YES-fm | |
aaCSRA.Add "JOZZ7AC-FM","mmsh://hdv5.nkansai.tv/minoh?MSWMExt=.asf" 'みのおエフエム | |
aaCSRA.Add "JOZZ7AL-FM","mmsh://hdv4.nkansai.tv/fmmoov?MSWMExt=.asf" 'FM MOOV KOBE | |
aaCSRA.Add "JOZZ7AH-FM","mmsh://simuledge.shibapon.net/FmMiki?MSWMExt=.asf" 'エフエムみっきぃ | |
aaCSRA.Add "JOZZ7AQ-FM","mmsh://hdv3.nkansai.tv/jungle" 'FMジャングル | |
aaCSRA.Add "JOZZ7AE-FM","mmsh://hdv2.nkansai.tv/fmyy" 'FMわぃわぃ | |
aaCSRA.Add "JOZZ7AU-FM","mmsh://hdv5.nkansai.tv/genki/?MSWMExt=.asf" 'FM GENKI | |
aaCSRA.Add "JOZZ7BM-FM","mmsh://hdv5.nkansai.tv/fm805" 'たんばコミュニティエフエム | |
aaCSRA.Add "JOZZ7AI-FM","mmsh://hdv.nkansai.tv/aiai" 'FM aiai | |
aaCSRA.Add "JOZZ7AX-FM","mmsh://hdv5.nkansai.tv/honey" 'HONEY FM | |
aaCSRA.Add "JOZZ7BD-FM","mmsh://hdv3.nkansai.tv/banban" 'BAN-BANラジオ | |
aaCSRA.Add "JOZZ7AO-FM","mmsh://hdv4.nkansai.tv/beachstation?MSWMExt=.asf" 'ビーチステーション | |
aaCSRA.Add "JOZZ7BL-FM","mmsh://hdv2.nkansai.tv/hasimoto" 'FMはしもと | |
aaCSRA.Add "JOZZ7BI-FM","mmsh://simuledge.shibapon.net/FmTanabe?MSWMExt=.asf" 'FM TANABE | |
aaCSRA.Add "JOZZ8AT-FM","mmsh://121.1.145.25:8080/streaming.asf" 'DARAZ FM | |
aaCSRA.Add "JOZZ9AC-FM","mmsh://simuledge.shibapon.net/B-FM791?MSWMExt=.asf" 'B-FM791 | |
aaCSRA.Add "JOZZ9AA-FM","mmsh://hdv4.nkansai.tv/fmsun?MSWMExt=.asf" 'FM SUN | |
aaCSRA.Add "JOZZ9AB-FM","mmsh://hdv4.nkansai.tv/takamatsu?MSWMExt=.asf" 'FM815 | |
aaCSRA.Add "JOZZ0AM-FM","mmsh://hdv.nkansai.tv/starcorn" 'スターコーンFM | |
aaCSRA.Add "JOZZ0CA-FM","mmsh://st1.shimabara.jp/comiten" 'コミュニティラジオ天神 | |
aaCSRA.Add "JOZZ0AU-FM","mmsh://st1.shimabara.jp/fmkitaq" 'FM KITAQ | |
aaCSRA.Add "JOZZ0BK-FM","mmsh://hdv3.nkansai.tv/hibiki" 'エフエムひびき | |
aaCSRA.Add "JOZZ0BF-FM","mmsh://st1.shimabara.jp/fmlive" 'FMしまばら | |
aaCSRA.Add "JOZZ0BZ-FM","mmsh://211.1.40.21:80/nobeoka?MSWMExt=.asf" 'FMのべおか | |
aaCSRA.Add "JOZZ0BD-FM","mmsh://hdv.nkansai.tv/amami" 'ディ!ウェイヴ | |
aaCSRA.Add "JOZZ0BQ-FM","mmsh://hdv5.nkansai.tv/ginga?MSWMExt=.asf" 'FMぎんが | |
aaCSRA.Add "JOZZ0BC-FM","mmst://118.21.140.45/Push1?MSWMExt=.asf" 'FMいしがき サンサンラジオ | |
aaCSRA.Add "JOZZ0ZP-FM","mmsh://211.1.40.21/fm21?MSWMExt=.asf" 'FM21 | |
aaCSRA.Add "JOZZ0BT-FM","rtsp://hdv2.nkansai.tv/motob" 'ちゅらハートFMもとぶ | |
aaCSRA.Add "JOZZ0AT-FM","mmsh://hdv3.nkansai.tv/nirai?MSWMExt=.asf" 'FMニライ | |
aaCSRA.Add "JOZZ0CG-FM","mmsh://hdv5.nkansai.tv/ginowancity?MSWMExt=.asf" 'FMぎのわん | |
aaCSRA.Add "JOZZ0BB-FM","mmsh://hdv4.nkansai.tv/lequio?MSWMExt=.asf" 'FMレキオ | |
aaCSRA.Add "JOZZ0CH-FM","rtsp://hdv5.nkansai.tv/ginowancity" 'ぎのわんシティFM | |
aaCSRA.Add "JOZZ0BI-FM","rtsp://hdv.nkansai.tv/okiradi" 'オキラジ | |
aaCSRA.Add "JOZZ0BO-FM","rtsp://hdv.nkansai.tv/fm-uruma" 'FMうるま | |
aaCSRA.Add "JOZZ0BW-FM","rtsp://hdv3.nkansai.tv/kumejima" 'FMくめじま | |
'ListenRadioのStation IDの連想配列 | |
Dim aaLISR | |
Set aaLISR = WScript.CreateObject("Scripting.Dictionary") | |
aaLISR.Add "JOZZ1AD-FM","30044" 'FM WING | |
aaLISR.Add "JOZZ1AC-FM","30029" 'FMくしろ | |
aaLISR.Add "JOZZ1BB-FM","30060" 'ラジオニセコ | |
aaLISR.Add "JOZZ1AK-FM","30005" '三角山放送局 | |
aaLISR.Add "JOZZ1AJ-FM","30090" 'FMアップル | |
aaLISR.Add "JOZZ1AQ-FM","30044" 'RadioTXT FM dramacity | |
aaLISR.Add "JOZZ1AE-FM","30016" 'FM JAGA | |
aaLISR.Add "JOZZ1AI-FM","30034" 'ラジオカロスサッポロ | |
aaLISR.Add "JOZZ1AA-FM","30047" 'FMいるか | |
aaLISR.Add "JOZZ1AB-FM","30074" 'FMりべーる | |
aaLISR.Add "JOZZ2AL-FM","30079" 'Be FM | |
aaLISR.Add "JOZZ2AV-FM","30050" 'カシオペアFM | |
aaLISR.Add "JOYZ2AK-FM","30095" '陸前高田災害FM | |
aaLISR.Add "JOZZ2BI-FM","30097" 'みやこハーバーラジオ | |
aaLISR.Add "JOZZ2AB-FM","30007" 'RADIO3 | |
aaLISR.Add "JOZZ2AG-FM","30037" 'ラジオ石巻 | |
aaLISR.Add "JOZZ2BO-FM","30094" 'ラヂオ気仙沼 | |
aaLISR.Add "JOZZ2AF-FM","30056" 'BAY WAVE | |
aaLISR.Add "JOZZ2AP-FM","30018" 'FMいずみ | |
aaLISR.Add "JOZZ2BL-FM","30092" 'なとらじ801 | |
aaLISR.Add "JOZZ2AN-FM","30030" 'FMゆーとぴあ | |
aaLISR.Add "JOZZ2BC-FM","30076" '横手かまくらFM | |
aaLISR.Add "JOZZ2BH-FM","30089" '鹿角きりたんぽFM | |
aaLISR.Add "JOZZ2AS-FM","30014" 'エフエム椿台 | |
aaLISR.Add "JOZZ2AE-FM","30009" 'FMいわき | |
aaLISR.Add "JOYZ2AM-FM","30099" 'おだがいさまFM | |
aaLISR.Add "JOZZ2AW-FM","30019" 'FM-MOTCom | |
aaLISR.Add "JOZZ2BB-FM","30020" 'KOCOラジ | |
aaLISR.Add "JOYZ2AF-FM","30092" '南相馬ひばりFM | |
aaLISR.Add "JOZZ3AN-FM","30022" 'FMぱるるん | |
aaLISR.Add "JOZZ3BX-FM","30075" 'たかはぎFM | |
aaLISR.Add "JOZZ3BU-FM","30023" 'FMひたち | |
aaLISR.Add "JOZZ3BV-FM","30043" 'まえばしCITYエフエム | |
aaLISR.Add "JOZZ3BK-FM","30026" 'すまいるエフエム | |
aaLISR.Add "JOZZ3AV-FM","30002" 'フラワーラジオ | |
aaLISR.Add "JOZZ3CD-FM","30035" 'FM Kawaguchi | |
aaLISR.Add "JOZZ3CE-FM","30096" 'ハローハッピー・こしがやエフエム | |
aaLISR.Add "JOZZ3BI-FM","30008" 'REDS WAVE | |
aaLISR.Add "JOZZ3CL-FM","30081" '八王子FM | |
aaLISR.Add "JOZZ3BF-FM","30036" 'レインボータウンFM | |
aaLISR.Add "JOZZ3AW-FM","30039" '調布FM | |
aaLISR.Add "JOZZ3BL-FM","30033" 'エフエムたちかわ | |
aaLISR.Add "JOZZ3AB-FM","30028" '湘南ビーチFM | |
aaLISR.Add "JOZZ3AK-FM","30046" 'かわさきFM | |
aaLISR.Add "JOZZ3AI-FM","30063" 'レディオ湘南 | |
aaLISR.Add "JOZZ3BQ-FM","30064" 'エフエム戸塚 | |
aaLISR.Add "JOZZ3AL-FM","30080" 'FMHOT893 | |
aaLISR.Add "JOZZ3BE-FM","30061" 'FMサルース | |
aaLISR.Add "JOZZ3BW-FM","30057" 'FMカオン | |
aaLISR.Add "JOZZ5AG-FM","30006" 'ラジオ・ミュー | |
aaLISR.Add "JOZZ5AA-FM","30001" 'FM N1 | |
aaLISR.Add "JOZZ5AK-FM","30012" '敦賀FM | |
aaLISR.Add "JOZZ4AQ-FM","30086" 'あづみ野エフエム放送 | |
aaLISR.Add "JOZZ4AL-FM","30032" 'FM軽井沢 | |
aaLISR.Add "JOZZ6AM-FM","30062" 'Ciao! | |
aaLISR.Add "JOZZ6AX-FM","30004" 'MID-FM | |
aaLISR.Add "JOZZ6AF-FM","30040" 'FMおかざき | |
aaLISR.Add "JOZZ6AQ-FM","30065" 'Pitch FM | |
aaLISR.Add "JOZZ6AN-FM","30015" 'CTY-FM | |
aaLISR.Add "JOZZ7AY-FM","30082" '京都三条ラジオカフェ | |
aaLISR.Add "JOZZ7AG-FM","30049" 'エフエムひらかた | |
aaLISR.Add "JOZZ7AF-FM","30073" 'YES-fm | |
aaLISR.Add "JOZZ7BC-FM","30048" 'FM千里 | |
aaLISR.Add "JOZZ7AQ-FM","30013" 'FMジャングル | |
aaLISR.Add "JOZZ7AU-FM","30041" 'FM GENKI | |
aaLISR.Add "JOZZ7AI-FM","30067" 'FM aiai | |
aaLISR.Add "JOZZ7BD-FM","30078" 'BAN-BANラジオ | |
aaLISR.Add "JOZZ7AO-FM","30084" 'ビーチステーション | |
aaLISR.Add "JOZZ7BI-FM","30051" 'FM TANABE | |
aaLISR.Add "JOZZ8AT-FM","30053" 'DARAZ FM | |
aaLISR.Add "JOZZ9AC-FM","30010" 'エフエムびざん | |
aaLISR.Add "JOZZ9AA-FM","30070" 'FM SUN | |
aaLISR.Add "JOZZ9AB-FM","30024" 'FM815 | |
aaLISR.Add "JOZZ0BK-FM","30052" 'AIR STATION HIBIKI | |
aaLISR.Add "JOZZ0BZ-FM","30088" 'FMのべおか | |
aaLISR.Add "JOZZ0BD-FM","30054" 'あまみエフエム | |
aaLISR.Add "JOZZ0BC-FM","30069" 'FMいしがきサンサンラジオ | |
aaLISR.Add "JOZZ0CC-FM","30055" 'FMなんじょう | |
aaLISR.Add "JOZZ0AT-FM","30003" 'FMニライ | |
aaLISR.Add "JOZZ0CG-FM","30093" 'FMぎのわん | |
aaLISR.Add "JOZZ0CH-FM","30098" 'ぎのわんシティFM | |
aaLISR.Add "JOZZ0BG-FM","30083" 'FMとよみ | |
aaLISR.Add "JOZZ0BI-FM","30066" 'オキラジ | |
aaLISR.Add "JOZZ0B0-FM","30011" 'FMうるま | |
aaLISR.Add "JOZZ0BW-FM","30077" 'FMくめじま | |
'AFNのStreaming URLの連想配列 ※ホスト名の頭の数字は時々変更されるので、その都度変更が必要 | |
Dim aaAFN | |
Set aaAFN = WScript.CreateObject("Scripting.Dictionary") | |
aaAFN.Add "AFNP_MSW","http://17803.live.streamtheworld.com/AFNP_MSW.mp3" '@三沢 | |
aaAFN.Add "AFNP_TKO","http://18393.live.streamtheworld.com/AFNP_TKO.mp3" '@横田 | |
aaAFN.Add "AFNP_IWA","http://18743.live.streamtheworld.com/AFNP_IWA.mp3" '@岩国 | |
aaAFN.Add "AFNP_SBO","http://19993.live.streamtheworld.com/AFNP_SBO.mp3" '@佐世保 | |
aaAFN.Add "AFNP_OKN","http://14013.live.streamtheworld.com/AFNP_OKN.mp3" '@沖縄 | |
aaAFN.Add "AFN_JOE","http://20423.live.streamtheworld.com/AFN_JOEP.mp3" 'AFN Joe Radio | |
aaAFN.Add "AFN_CTY","http://17793.live.streamtheworld.com/AFN_CTYP.mp3" 'AFN Country | |
aaAFN.Add "AFN_GRV","http://16693.live.streamtheworld.com/AFN_GRV.mp3" 'AFN Gravity | |
aaAFN.Add "AFN_PTK","http://18393.live.streamtheworld.com/AFN_PTK.mp3" 'AFN PowerTalk | |
aaAFN.Add "AFN_VCE","http://14983.live.streamtheworld.com/AFN_VCE.mp3" 'AFN The Voice | |
aaAFN.Add "AFN_HOT","http://18813.live.streamtheworld.com/AFN_HOTP.mp3" 'AFN Hot AC(Adult Contemporary) | |
aaAFN.Add "AFN_LGY","http://17813.live.streamtheworld.com/AFN_LGYP.mp3" 'AFN Legacy | |
aaAFN.Add "AFN_FAN","http://14533.live.streamtheworld.com/AFN_FAN.mp3" 'AFN Fans | |
aaAFN.Add "AFN_FRE","http://18393.live.streamtheworld.com/AFN_FREP.mp3" 'AFN Freedom | |
'録音を開始する。エラー発生したらリトライ、なおリトライ制限とリトライと共にインターバルを増やしてゆく考慮あり | |
Dim strWeekdays | |
strWeekdays = Array("(日)", "(月)", "(火)", "(水)", "(木)", "(金)", "(土)") '曜日のコンスタント値 | |
Dim lngWeekday '今日の曜日インデックス | |
Dim strNow 'ファイル名とする日時文字列 | |
Dim strSuffix 'ファイル名の接尾文字列 | |
Dim RecTimeStr '録音時間(Doロールの最初に計算) | |
Dim RecSecond '録音秒数(Doロールの最初に計算) | |
Dim strCmd | |
Dim MaxRetry | |
MaxRetry = 20 'リトライ回数制限値(初期インターバル3秒でリトライ20回であれば約10分+α程は通信回復までリトライ、それを超えたらギブアップ) | |
Dim CtrRetry | |
CtrRetry = 0 'リトライ回数カウンター | |
Dim IntervalRetry | |
IntervalRetry = 2 '途中で録音中断した時にリトライを行うまでの初期インターバル秒で、リトライが増えるにしたがって、リトライ回次数×前回のインターバルという計算でインターバルを増やす。これで数分に及ぶ通信途絶の時に、無駄なリトライでリトライ制限に達してしまうことを減らす。 | |
Dim Ans | |
Dim pFileName '録音保存するファイル名 | |
Dim aryOutFiles() '保存した録音ファイル名の配列、リトライがなければ1ファイルのみ | |
Dim aryOutCtr '録音したファイルカウントで、リトライがなければZero | |
aryOutCtr = 0 | |
Do | |
'録音時間を求める | |
RecTime = EndDate - Now() + TimeValue("00:00:30") '30秒ほどマージンを設けることで接続までの時間マージンを考慮する。 | |
RecTimeStr = Right("0" & Hour(RecTime) , 2) + ":" + Right("0" & Minute(RecTime) , 2) + ":" + Right("0" & Second(RecTime) , 2) | |
RecSecond = Hour(RecTime) * 60 * 60 + Minute(RecTime) * 60 + Second(RecTime) + 10 '10秒ほどマージンを設ける(rtmpdumpの内部タイマーとスクリプトのタイマーがズレる様なので | |
'現在の曜日インデックスを求める | |
lngWeekday = Weekday(Now) -1 | |
'ファイル名のプレフィックスを編集 | |
strNow = Year(Now) & "年" & Right("0" & Month(Now), 2) & "月" & Right("0" & Day(Now), 2) & "日" & strWeekdays(lngWeekday) & Right("0" & Hour(Now), 2) & "時" & Right("0" & Minute(Now), 2) & "分 " | |
If CtrRetry > 0 Then | |
strSuffix = argOut & "~" & Right("000" & CtrRetry, 3) '1分以内にリトライが発生するとファイル名が重複するのでリトライ回数もファイル名に含める | |
Else | |
strSuffix = argOut | |
End If | |
'録音起動するコマンドラインを編集 | |
pFileName = argDirectory & strNow & strSuffix | |
If argType = "" And aaNHK.Exists(argStation) Then 'らじる★らじるの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".m4a" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i """ & aaNHK(argStation) & """ -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -nodisp -analyzeduration 1M -probesize 1M -i """ & aaNHK(argStation) & """" | |
End If | |
ElseIf argType = "" And argStation = "AG" Then '超A&G!の録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".flv" | |
strCmd = "bin\rtmpdump --rtmp ""rtmp://fms-base1.mitene.ad.jp/agqr/aandg22"" --timeout 60 -B " & RecSecond & " --live -o """ & pFileName & """" | |
'strCmd = "bin\ffmpeg -i ""rtmp://fms-base1.mitene.ad.jp/agqr/aandg22 live=1"" -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -i ""rtmp://fms-base1.mitene.ad.jp/agqr/aandg22 live=1""" | |
End If | |
ElseIf argType = "" And argStation = "Suono" Then 'Suono Dolceの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".mp4" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i ""http://web-cache.stream.ne.jp/web/live/hls-live/suono-hls-live/suono-live.m3u8"" -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -analyzeduration 1M -probesize 1M -i ""http://web-cache.stream.ne.jp/web/live/hls-live/suono-hls-live/suono-live.m3u8""" | |
End If | |
ElseIf argType = "" And argStation = "OTTAVA" Then 'OTTAVAの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".mp4" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i ""http://rakuten.streamguys1.com/ottava1_b"" -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -nodisp -analyzeduration 1M -probesize 1M -i ""http://rakuten.streamguys1.com/ottava1_b""" | |
End If | |
ElseIf (argType = "" or argType = "JCBA") And aaJCBA.Exists(argStation) Then 'JCBAの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".m4a" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i ""http://musicbird-hls.leanstream.co/musicbird/" & aaJCBA(argStation) & ".stream/playlist.m3u8"" -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -analyzeduration 1M -probesize 1M -nodisp -i ""http://musicbird-hls.leanstream.co/musicbird/" & aaJCBA(argStation) & ".stream/playlist.m3u8""" | |
End IF | |
argType = "JCBA" | |
ElseIf (argType = "" or argType = "CSRA") And aaCSRA.Exists(argStation) Then 'CSRAの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".wma" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i """ & aaCSRA(argStation) & """ -t " & RecTimeStr & " -f asf -vn -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -analyzeduration 1M -probesize 1M -nodisp -i """ & aaCSRA(argStation) & """" | |
End IF | |
argType = "CSRA" | |
ElseIf (argType = "" or argType = "LISR") And aaLISR.Exists(argStation) Then 'ListenRadioの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".m4a" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i ""http://mtist.as.smartstream.ne.jp/" & aaLISR(argStation) & "/livestream/playlist.m3u8"" -t " & RecTimeStr & " -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -analyzeduration 1M -probesize 1M -nodisp -i ""http://mtist.as.smartstream.ne.jp/" & aaLISR(argStation) & "/livestream/playlist.m3u8""" | |
End IF | |
argType = "LISR" | |
ElseIf argType = "" And aaAFN.Exists(argStation) Then 'AFNの録音パラメータ | |
If argPlay = "no" Then | |
pFileName = pFileName & ".mp3" | |
strCmd = "bin\ffmpeg -analyzeduration 1M -probesize 1M -i """ & aaAFN(argStation) & """ -t " & RecTimeStr & " -vn -c:a copy """ & pFileName & """" | |
Else | |
TerminateProcess("ffplay.exe") | |
strCmd = "bin\ffplay -analyzeduration 1M -probesize 1M -nodisp -i """ & aaAFN(argStation) & """" | |
End IF | |
argType = "AFN" | |
Else | |
Ans = MsgBox(" 放送局指定が間違っています。type=" & argType, 48, "☆指定ミス☆") | |
Exit Do | |
End If | |
'録音プログラムを起動する | |
If argPlay = "yes" Then | |
If argDebug = "yes" Then WScript.Echo strCmd | |
WSHShell.Run strCmd,gShellStyle,True | |
Exit Do | |
Else | |
If argDebug = "yes" Then WScript.Echo strCmd | |
WSHShell.Run strCmd,gShellStyle,True | |
End IF | |
'録音したファイル名を記録 | |
if WSHFS.FileExists(pFileName) = True Then | |
ReDim Preserve aryOutFiles(aryOutCtr) | |
aryOutFiles(aryOutCtr) = pFileName | |
aryOutCtr = aryOutCtr + 1 | |
WScript.Echo " 通知:録音ファイル名「" & pFileName & "」が出力されました。" | |
Else | |
WScript.Echo " 注意:録音ファイル名「" & pFileName & "」は出力されませんでした!" | |
End If | |
'録音終了の判断 | |
If Now() >= EndDate Then Exit Do '予定録音時間まで録音できたので完了 | |
CtrRetry = CtrRetry + 1 | |
If CtrRetry > MaxRetry Then | |
Ans = MsgBox("abend : リトライ回数制限に達しましたので録音を中断しました。", 48, "☆録音リタイア☆") | |
Exit Do 'リトライ回数制限を超えたら諦める | |
End If | |
WScript.Sleep(1000 * (IntervalRetry * CtrRetry)) 'リトライ・インターバルを増やし行くのは通信途絶が長いくなった場合に必要な配慮 | |
WScript.Echo "warning : " & Right("000" & CtrRetry, 3) & "回目のリトライ発生!" | |
Loop | |
'録音完了をメールで通知する。 | |
If argMail = "yes" or argMail = "att" Then call SendMail() | |
'パソコンを休止にする。 ※全ての環境で機能するのかな? | |
If argSleep = "yes" Then | |
WSHShell.Run "%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState",,False | |
End If | |
'メール通知(CDOでメール送信できる環境であることが前提、例えばHome Editionなどは使えないと思われる。ポート25が開いていないLANでも利用できない。) | |
Function SendMail() | |
Dim oMsg | |
Dim pBody | |
Dim pFileNm | |
Dim oFile | |
Set oMsg = CreateObject("CDO.Message") | |
oMsg.From = argSendTo | |
oMsg.To = argSendTo | |
oMsg.Subject = "録音が完了しました。 放送局 : " & argStation & " ファイル : " & argOut | |
pBody = "録音が完了しました" & vbCrLf | |
For Each pFileNm In aryOutFiles | |
pBody = pBody & "録音ファイル名 : " & pFileNm & vbCrLf | |
'録音したファイルを添付する(録音時間が長い場合に受信でるかは、送信先のSMTPサーバーの設定に依存する) | |
If argMail = "att" Then | |
Set oFile = WSHFS.GetFile(pFileNm) | |
oMsg.AddAttachment(oFile.Path) 'フルパスじゃないと添付出来ない | |
End If | |
Next | |
oMsg.TextBody = pBody | |
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 | |
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = argSMTP | |
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 | |
oMsg.Configuration.Fields.Update | |
oMsg.Send | |
End Function | |
'指定した名前のプロセスを強制終了 | |
Sub TerminateProcess(ProcessName) | |
Dim objProcList,objProcess | |
Set objProcList = GetObject("winmgmts:").InstancesOf("win32_process") | |
For Each objProcess In objProcList | |
If LCase(objProcess.Name) = LCase(ProcessName) Then objProcess.Terminate | |
Next | |
End Sub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment