##################################################
#Project Name    : jfmradio_recorder
#File Name       : jfmradio_recorder_(date)
#Version         : 0.6a
#Encoding        : python3.9(inclueding GRC3.8)
#Creation Date   : 2022.1.15
#Modification Date: 2022.4.10
#
#Copyright c 2021-2022 falconblog.org. All rights reserved.
#
##################################################

●動作環境
Windows10
USBチューナのドライバーzadigがインストール済み
動作確認チューナー：RTL2832, RTL-SDR.COM blog V3, HackRF one(firmware 2018.01)
ディエンファシスを50usecとしているため日本国内専用でモノラル受信です。

●USBチューナードライバ－のインストール
USBチューナーはZadigを使いますので事前にインストールしてください。
exeファイルの動作に必要なドライバーソフトはzadigのみです。

Zadigの入手先→ https://zadig.akeo.ie/
インストール方法は→ https://falconblog.org/zadig-installation-method/

●ソフトウェアの構成とインストール
本ソフトウェアは、本体ソフト、チューナーソフト、予約録音ソフトの3分割構成となります。
入手後適当なフォルダにコピーしてzipを展開し、プログラムはすべて同一フォルダに入れてください。
単体で動きますのでPCへのインストールは不要です。ネットワークドライブ上でも動作します。
・jfm_rec_06：GUIプログラム本体
・jfmradio_recorder_06.exe：FM放送の受信・予約録音プログラム
・jfmradio_tuner02.exe：現在のFM放送の受信プログラム
・settings_fm.ini:初期設定ファイル(jfm_rec, jfmradio_recorderが参照）

●基本的な使い方
jfm_rec_06.exeをダブルクリックしてソフトを起動します。

○FMラジオを聞く
ウィンドウのGUIから放送局チャンネル、使用チューナー(Device Arguments)を設定して、「FMラジオを聴く」するをクリックすると、
FMラジオチューナーが起動し、FM放送を聞くことが出来ます。
放送局の最大表示数は10chです。
チューナーはスペクトラムアナライザを表示していますので、受信電界強度が確認できます。
ステレオモードの場合はLR音声のスペクトラムとステレオON/OFFボタンが表示されます。
起動後は、ボリューム、周波数、RFゲインを任意の値に変更することも出来ます。
ウィンドウを閉じるとチューナープログラムが終了し、GUIの画面の操作が出来るようになります。

放送局をクリックすることでradikoから現在の番組をダウンロードし、ウインドウ内に番組名を表示します。(ver.0.5より）
放送局のアドレス設定はsettings_fm.iniファイルにて設定します。
PCがネットワークにつながっていない場合は番組が表示されません。

○FMラジオを予約録音する
ウィンドウのGUIから周波数、時刻、曜日、繰り返し回数、録音時間、使用チューナー(Device Arguments)、受信方式を設定して、予約するをクリックします。
予約するをクリックするとコマンドプロンプトウィンドウに予約状況を表示して録音待ちになります。

-----表示例
jfmradio_recorder_06 80.2 19:24 5 2 1 rtl=0 FM802 Stereo
FM Radio Recorder Ver.0.6 Copyright 2022 falconblog.org. All rights reserved.
ステレオで録音します
予約スケジュール： 曜日=土(録音回数=1) 開始時刻=19:24 録音時間=2.0分
予約キャンセル：Ctrl +Cで強制停止
-----

録音開始時刻になるとコマンドプロンプトウィンドウ上にチューナーの動作状態が表示されます。
録音が正常終了すると自動的にウィンドウが閉じ、プログラムが終了します。

-----表示例
gr-osmosdr 0.2.0.0 (0.2.0) gnuradio v3.8.2.0-57-gd71cd177
built-in source types: file rtl rtl_tcp uhd hackrf bladerf airspy airspyhf soapy redpitaya
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
[R82XX] PLL not locked!
gr::pagesize: no info; setting pagesize = 4096
Now Recording... Dulation Time = 120
Finish to Recording.
-----

○録音ファイルについて
録音したファイル名は周波数、日時、開始時刻が振られて保存されます。ステレオモードで録音した場合は末尾に"_st"がつきます。
fm_（周波数）_（日時）_（開始時刻）.wav

録音ファイルはカレントフォルダ直下にあるrecordフォルダに保存されます。
保存先はsettings_fm.iniで任意設定でき、以下の".\record\"の値を書き換えることで任意のフォルダに記録できます。
フォルダ名、フォルダパスともに日本語の２バイト文字は指定できません。(gnuradio側の制約）
google driveなど２バイトフォルダ名が入る場合は、プログラム本体をgoogle drive上に置いて実行することで対処できます。

（記述例）
--デフォルト
data4  =  .\record\
--onedriveに保存する場合
data4  =  C:\Users\(user名）\OneDrive\record\
user名に２バイト文字は設定できません
--google driveに保存する場合（フォルダパスに２バイト文字を含む場合）
data4  =  .\record\ のままで、プログラム本体をG:\マイドライブ\ 下において実行する

（注意・制約事項）
・予約実行後は予約プログラムの終了待ちとなるため、ウィンドウ上で予約解除は出来ません。
　予約解除はコマンドプロンプトよりCtrl+Cを入力し、プログラムを強制終了してください。
・予約待機中にUSBチューナ－を脱着すると正常に動作し無いことがあります。
　脱着した場合は、ソフトを再起動して、再度予約してください。

○起動時の初期値変更について
起動時の周波数、録音開始時刻、録音時間は、settings_fm.iniの書き換えにより変更出来ます。
お住まいの地域に合わせて初期値を変更してください。
[SECTION1]　→ SECTION1のみ反映されます
data1  =  87.1　→受信周波数 XX.Xの形式で入力
data2  =  00:30　→　録音開始時刻 YY:ZZの形式で入力、0（ゼロ）は省略しないでください
data3  =  25　→　録音時間 AA(分)の形式で入力
data4  =  .\record\ →　録音ファイル保存先の設定、２バイト文字の設定不可、最後の"\"をつけ忘れない

○INIファイルの放送局設定について
iniファイルの放送局設定の記載様式は以下の通りです。
[SECTION1] ---radiko受信ファイルの設定 
東京の場合
data5 = http://radiko.jp/v3/program/now/JP13.xml
北海道の場合
data5 = http://radiko.jp/v3/program/now/JP1.xml ---"JP01"ではなく"JP1"です
[CH1] --- チャンネル数CH1 ～ Ch10まで設定します
channel_id = FMO radiko_v3で呼ばれる番組表の放送局のIDです
channel = FM大阪　表示するチャンネル名称です
freq = 85.1　受信周波数です
file_name = FM_OSAKA　録音時のファイルネーム接頭文字です　ひらがな、漢字の2バイト文字は使えません
back_color = background-color: #f3cac9　GUIの背景色です　16進コードで設定します

●FM放送チューナー jfmradio_tuner_02.pyの使い方
FM放送を聞くプログラムです。録音はサポートしていません。
このpyファイルを動かすにはGNUradioがインストールされている必要があります。
プログラムはコマンドラインより以下の操作で実行できます。

$ python jfmradio_tuner_01 <FREQ> <device arg.> <Stereo mode>

オプションの説明
- FREQ: 周波数をMHzで指定します。（例：80.0)
- device arg.: 受信に使うSDRを指定します。rtl-sdrが１台だけならrtl=0と入力します。

プログラムの終了はコマンドラインでCtrl+Cを入力するか、ウィンドウを閉じてください。

●FM放送予約録音ソフト jfmradio_recorder_06.pyの使い方
FM放送の予約録音をするプログラムです。音声はWAV形式での録音となります。
pythonのscheduleモジュールとGNURadioのFM受信モジュールで構成されていますので、
このpyファイルを動かすにはPCにGNUradioとscheduleモジュールがインストールされている必要があります。
コマンドラインより以下の形式で実行できます。

$ python jfmradio_recorder_06.py <FREQ> <XX:YY> <week:No.> <Dulation:min> <times> <device arg.> <file_name> <Stereo>

オプションの説明
exe以降のオプションは正しく入力してください。
プログラムでは引数の数をチェックしているだけですので間違って入れると録音開始時にエラーとなります。

- FREQ: 周波数をMHzで指定します。（例：80.0)
- XX:YY : 時刻を09:23の24時間形式で設定します。先頭の0は省略できません。
- Week No.: 予約する曜日を数字で指定します。（0:月, 1:火, 2:水, 3:木, 4:金, 5:土, 6:日 7:毎日）
- Dulation:min : 録音する時間を分で指定します。（例：25)
- times : 予約の繰り返し回数を設定します(例：1)
- device arg.: 受信に使うSDRを指定します。rtl-sdrが１台だけならrtl=0と入力します。
- file_name: 保存時ファイル名の接頭語を指定します
- Stereo :"Stereo"が指定されるとステレオモードで録音します。

予約がすべて実行されるとプログラムは終了します。
中止をしたい場合はコマンドウィンドウでCtrl+Cを入力してください。

●ソースファイルについて
本プログラムはGPLv3です。権利等表記についてはソースファイル内を参照してください。
ソースファイルはGNURadio3.8上で動作することを確認しています。
pyファイル単体ではGNURadioのライブラリが呼び出せる環境でないと動作しません。
exeファイルはGNURadioがなくても動くようになっています。

●ライセンス
本ソフトはフリーソフトです、個人利用・商用利用を問わず無料で利用できます。
本ソフトは無保証です。本ソフトの使用から生じるいかなる損害に関しても一切責任は負いませんので自己責任で使用してください。
インターネット上での再配布は許可していません。利用者が限定された社内ネットワークやメールでの再配布は構いません。
ご意見、ご要望、不具合等ありましたら、メールでご連絡ください。

●連絡先
ご要望等は以下HPの「お問い合わせ」よりお知らせいただければ幸いです。
HomePage: https://falconblog.org

Copyright c 2021-2022 falconblog.org. All rights reserved.

