GNURadioとPythonでFMラジオ予約録音ソフトを製作

Radio

前回の記事で紹介したGNURadioを使ったFMラジオ予約録音プログラムをexe化すると、GNURadioがインストールされていないWindows PCでもラジオの録音ができるようになります。

このexe化したソフトを何度か使ってみたのですが、コマンドプロンプトを開ける操作やオプションの入力がとても面倒に感じたので、Windows用バッチファイルを作って作業量を減らしてみました。

バッチファイルの作成により、FMラジオの予約録音がPCに不慣れな方でも簡単に使えるようになりましたので、ソフトウェアパッケージにまとめて配布させていただくことにしました。

使えるUSBチューナーとPC動作環境

本ソフトウェアの動作環境は次の通りです。

  • Windows10 64bit (PC性能はそれほどいりません)
  • USBチューナのドライバーzadigがインストール済み(インストール要領はこちら
  • 動作確認チューナー:RTL2832, RTL-SDR.COM blog V3, HackRF one(firmware 2018.01)
  • ディエンファシスを50usecとしているため日本国内専用でモノラル受信です。

本ソフトウェアを動かす前にSDRsharp(SDR#)やHDSDRなどの汎用SDRでFMラジオが受信できることを確かめてください。

FMラジオは帯域が広くそれほど周波数精度も求められないので、USBチューナーは安価なものでも十分です。もし5,000円程度の費用が出せるならRTL-SDR.COMがオススメです。AMラジオや短波ラジオも聞ける上、周波数精度も高いです。

USB2.0 デジタル DVB-T SDR+ DAB+ FM HDTV TVチューナー 受信機 RTL2832U+ R820T2

HackRF oneは受信周波数帯域は広いのですが、情報が少ないので玄人向きです。またAMラジオやHF帯が聞けないので、ラジオ受信用としては選択しない方が良いと思います。

ソフトの入手とインストール

作成したソフトウェアは本ページの下部のリンクからダウンロードしてください。

ダウンロードしたファイルは、ミュージックフォルダなど音楽データ保存に適したフォルダへ移動して、zipファイルを展開します。展開したファイルの中にある「jfmradio_recorder.exe」がプログラム本体です。

jfmradio_recorderは、Windowsのコマンドプロンプト上で動作する単体ソフトウェアですので、PCへインストールする必要はありません。

録音データは、jfmradio_recorder.exeがあるフォルダに自動生成されます。未圧縮のWAVファイル(CD音質:90分で700MB程度)が生成されますので、ディスクの空容量には注意してください。

GNURadioライブラリ(GPLv3)を使っている関係から、sourceディレクトリにソースファイル(.pyファイル)を添付していますが、削除しても動作に支障はありません。

ソフトの使い方

基本的な使い方

使い方は、持っているUSBチューナにあったbatファイルを起動し、ガイダンスに従って、周波数、時刻、曜日、録音時間を設定をするだけです。

USBチューナーにAIRSPY社のairspyシリーズを使うときは、バッチファイルを編集して末尾の「rtl=0」を「airspy=0」に書き換えると動くと思います。

jfm-record-rtl0.bat →RTL2382を使う(推奨)
jfm-record-rtl1.bat →2個目のRTL2382を使う
jfm-record-hackrf.bat →HackRF oneを使う

バッチファイルを起動したらコマンドウィンドウが開きますので、周波数、時刻、曜日、録音時間を入力します。入力した値の確認を確認して、Enterを入力すると、プログラムが実行されて録音待ちになります。

受信周波数を設定してください。(MHz) 入力例:80.0   >80.2 →FM802の周波数
開始時間を入力してください(HH:MM) 入力例:13:45   >12:30 →12:30に録音開始
曜日を入力してください(No.) 0:月,1:火,2:水,3:木,4:金,5:土,6:日   >6  →曜日を数字で入力
録音時間を入力してください(MM) 入力例:30   >25 →25分を指定

周波数は 80.2 開始時間は 12:30 曜日は 6 録音時間は 25分で設定します。 →入力値が表示されるので確認
キャンセルはCtrl+cを入力してください。
続行するには何かキーを押してください . . .

予約録音をキャンセルする場合は、ctrl+cを入力し、バッチファイルの動作を停止してください。

E:\GRC2>python jfmradio_recorder_01.py 85.1 03:07 4 1 rtl=0
FM Radio Recorder Ver.0.1 Copyright 2021 falconblog.org. All rights reserved.
Recording schedule = Every Friday 03:07
Dulation Time = 1.0min

録音開始時刻になるとコマンドプロンプトウィンドウ上にチューナーの動作状態が表示され、録音を始めます。録音時間が終了するとコマンドウィンドウは自動で閉じます。

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 = 60
Finish to Recording.

録音終了後、ソフトのあるフォルダを確認すると録音ファイルが生成されています。ファイル名は周波数、日時、開始時刻が自動で割り振られて保存されますので、重複することはありません。

  • wavファイル記録様式:fm_(周波数)_(日時)_(開始時刻).wav

Wavファイルは容量が大きいので、fre:ac audio converterなどのフリーソフトでmp3形式に変換すれば、どの端末やカーナビでも録音したラジオ放送が聞けるようになります。

複数チャンネルの同時録音も出来る

USBチューナーを複数保有している方は、batファイルを複数起動して同時録音することも出来ます。

exeファイルの使い方

exeファイルは、コマンドラインより以下の形式で設定します。

> jfmradio_recorder_01.exe <FREQ> <XX:YY> <week:No.> <Dulation:min> <device arg.>

exe以降のオプションは正しく入力してください。

本プログラムでは、引数の数をチェックしているだけですので、間違って入れると録音時にエラーとなります。

  • FREQ: 周波数をMHzで指定します。(例:80.0)
  • XX:YY : 時刻を09:23の24時間形式で設定します。先頭の0は省略できません。
  • Week No.: 予約する曜日を数字で指定します。(0:月, 1:火, 2:水, 3:木, 4:金, 5:土, 6:日)
  • Dulation:min : 録音する時間を分で指定します。(例:25)
  • device arg.: 受信に使うSDRを指定します。rtl-sdrが1台だけならrtl=0と入力します。(間違っていても受信モジュールosmoSDRが探して受信してくれるようです)

現在の仕様では曜日指定までとしています。プログラムの変更により平日(weekday)や毎日などの設定も可能ですが、時刻や曜日を扱うプログラムは複雑(10進数ではないから)になりがちですので、ニーズがあれば対応してみようと思います。

既知の課題

本ソフトをGNURadioインストールしていないPCで動作させると以下エラーがでます。

録音の基本動作には影響ないようですが、対処法がわかりません。

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 Fitipower FC0012 tuner
C:\Users\falcon\AppData\Roaming\.gnuradio\prefs\vmcircbuf_default_factory: No such file or directory
gr::pagesize: no info; setting pagesize = 4096
Now Recording... Dulation Time = 60
Finish to Recording.

プログラムの製作について

GNURadioで初めてpythonに触れたのですが、C++よりかなり楽で面白くなって一気に組み上げました。

まだコマンドウィンドウで動くレベルですが、これからAM放送の受信フローなども付け足していきたいと思います。

ご要望等は本HPのお問い合わせページよりお知らせいただければ幸いです。

ダウンロードはこちら

ダウンロードは下のdownloadをクリックしてください。(33Mbytes程あります。)

jfmradio_recorder_v01

紹介動画はこちら

Comming Soon!