##################################################
#Project Name    : falcon fmradio　recorder for SDR
#File Name       : ffm_recorder
#Version         : 1.0.0
#Encoding        : python3.9(inclueding GRC3.8)
#Creation Date   : 2022.1.15
#Modification Date: 2022.6.26
#
#Copyright c 2021-2022 falconblog.org. All rights reserved.
#
###################################################
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <https://www.gnu.org/licenses/>.#
##################################################

●動作環境
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へのインストールは不要です。ネットワークドライブ上でも動作します。
・ffm_recorder.exe：GUIプログラム本体
・ffm_module.exe：FM放送の受信録音プログラム
・ffm_tuner.exe：現在のFM放送のGUI受信プログラム
・settings_fm.ini:初期設定ファイル(ffm_recorder, ffm_moduleが参照）
iniファイルはtokyo, fukuokaをサンプル作成しましたので、settings_fm.iniにリネームしてお使いいただけます。

●基本的な使い方
プログラムの全ファイルを同一フォルダに入れている状態で、ffm_recorder.exeをダブルクリックしてソフトを起動します。

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

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

○FMラジオを予約録音する
ウィンドウのGUIから周波数、時刻、曜日、繰り返し回数、録音時間、使用チューナー(Device Arguments)、受信方式を設定して、予約するをクリックします。
録音開始時刻になると録音モジュールが起動し、コマンドウィンドウが開き、動作状態が表示されます。
録音が正常終了すると自動的にウィンドウが閉じます。

-----表示例
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放送チューナー ffm_tuner.exeの使い方
FM放送を受信するプログラムです。録音はサポートしていません。
プログラムはコマンドラインより以下の操作で実行できます。

$ ffm_tuner.exe <FREQ> <device arg.> <Stereo mode>

オプションの説明
- FREQ: 周波数をMHzで指定します。（例：80.0)
- device arg.: 受信に使うSDRを指定します。rtl-sdrが１台だけならrtl=0と入力します。
- Stereo mode : ステレオ受信をするときは"Stereo"と記述します。Stereo以外の文字はモノラル録音します。

プログラムの終了はウィンドウを閉じてください。

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

$ ffm_module.exe <FREQ> <Dulation:min> <device arg.> <file_name> <Stereo>

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

- FREQ: 周波数をMHzで指定します。（例：80.0)
- Dulation:min : 録音する時間を分で指定します。（例：25)
- 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.
