長く使える!RTL-SDRを用いたFMラジオ予約録音ソフトの製作

Radio

ラジオ放送はradikoなどのネット放送が主流になりつつありますが、ネット接続環境がないと使えませんし、運営会社の都合による仕様変更で録音に制限がかかることも懸念です。

放送後のアーカイブ配信で聴くという方法もありますが、編集で音楽が抜かれているので、やはり生放送を録音するのが一番いいかなと思っていました。

そこで汎用USBチューナーを使った無料で使えるFM放送の予約録音プログラムを作ることにしました。

注記)本ソフトウェアは、前回の記事でFMラジオ予約録音ソフトをGUI化したものを改修しています。使っているうちに数値入力が面倒になってきて、受信出来ているか現在の放送を聴く機能も欲しいと感じたので、バージョンアップを行いました。

追記)GUIを中心にかなり手を入れました。基本モジュールの使い方は大きく変わりませんが、操作方法などは古い内容となっていますので、操作や新機能に関する説明ははこちらもご参照ください。

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

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

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

FMラジオは帯域が広く、それほど周波数精度も求められませんので、USBチューナーは2,000円以下で買える安価なものでも十分活用できます。

USBチューナーに5,000円程度の費用が出せるならばRTL-SDR.COMがオススメです。RTL-SDR.COMは、単体でAMラジオや短波ラジオも聞くことができます。1ppm (parts per million)級のクロックICを積んでいるため、受信周波数のズレが少なく快適に受信が楽しめます。デメリットとしては発熱が多いことくらいです。夏場は空調が効いた部屋で使う、もしくは、空冷が必要です^^;

機器の接続はUSBチューナー、アンテナをPCにつなげるだけですので、本記事では割愛します。

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

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

ソフトウェアは3つのプログラムで構成していますので、下部のリンクよりダウンロードしてください。exe化により容量が大きくなっていますのでネット環境に注意してください。またWindows実行ファイルは随時アップデートし、最新版のみの公開となりますので予めご了承ください。

  • jfm_rec_04, jfmradio_recorder_xx(xx:ver.No.):GUIソフト本体と予約録音プログラム
  • jfmradio_tuner01:現在の放送受信プログラム

→ダウンロードはこちら  

(ご注意)ソフトは随時最新版に更新しており、記事公開時のバージョンは配信していません。改修項目の詳細はソフト内の来歴(txtファイル)を参照してください。

ダウンロードしたファイルは、録音データ保存に適したフォルダへ移動して、zipファイルを展開します。

本ソフトウェアは、PCのプログラムフォルダへインストールする必要はありません。実行ファイルが3つとも同一フォルダに入れておくことで動作します。

録音データは未圧縮のWAVファイル(CD音質:90分で700MB程度)となりますので、長時間の録音をする場合はディスクの空容量に注意してください。

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

本ソフトの使用方法

このソフトウェアで「FMラジオの受信」「予約録音」ができます。

予約は、曜日指定と繰り返し回数の指定も可能です。

FMラジオの復調はワイドFM(モノラル)のみの対応、周波数ステップは0.1MHz、FMディエンファシスは50τ(日本専用)に設定しています。

USBチューナーの受信範囲に制限は加えていません。USBチューナ-が受信できる周波数であればどの帯域でも音声に復調することが出来ます。

ソフトを起動する

jfm_rec_04をダブルクリックで起動すると、以下のウィンドウ画面が出ます。

この画面でパラメータを決めて、サブプロセスに引数を渡して、受信や予約録音を実現しています。

非常にシンプルな構成ですので直感的に使うことが出来ます。

USBチューナーはほとんどRTL2832チップだと思うのでデフォルトは、「rtl=0」としています。HackRF oneなど使う場合は、USBチューナーを「hackrf=0」に設定してください。

周波数、開始時刻、録音時間の初期値はお住まいの地域により任意に変更ができるようにしており、その方法は後述します。

現在の放送を試聴する

FM周波数とUSBチューナー選択の確認して、FM放送を聴くをクリックするとチューナプログラムが起動して、すぐにFM放送を聴くことが出来ます。

受信周波数は、「FM周波数」で設定した値で起動します。周波数は受信プログラムのウィンドウ内の操作で変更も可能です。

予約操作の前に電界強度が大きくなるようアンテナの向き・角度の調整をしておくことで、良い音質で録音することが出来ます。

電波の伝搬は、天候や太陽の活動で常に変動しますので、受信レベルが見えるのは意外と面白いです。

試聴が終わったら、閉じるボタンを押して、予約録音に進んでください。

予約録音をする

無事に受信できることが確認出来ましたら、GUI画面より曜日、開始時刻、録音回数(繰り返し回数)、録音時間を設定します。

入力した値の確認を確認して「FM放送を予約」をクリックすると、予約録音プログラムが起動し、録音待ちになります。

FM Radio Recorder Ver.0.3 Copyright 2021 falconblog.org. All rights reserved.
Recording schedule = Next Saturday(times=1) 14:24
Dulation Time = 1.0min

予約録音をキャンセルする場合は、起動時に表示されたコマンドプロンプト上からCtrl+cを入力し、jプログラム動作を強制停止してください。(✕のクリックでは終了できません)

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

FM Radio Recorder Ver.0.4 Copyright 2021 falconblog.org. All rights reserved.
Recording schedule = Next Saturday(times=1) 14:24
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.

「Finish to Recording.」が表示されると録音が終了です。

次の繰り返し予約がなければ、GUI画面とコマンドウィンドウが閉じて、予約録音プログラムが自動終了します。

録音後フォルダを確認すると、WAVファイル形式の録音データが生成されています。

ファイル名は周波数、日時、開始時刻が自動で割り振られて保存されますので、重複することは無いと思います。

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

Wavファイルは容量が大きいため、VLC media playerなどのフリーソフトでmp3形式に圧縮変換しておくと容量を減らすことが出来ます。mp3データをSDカードに保存することで、カーナビで録音したラジオ放送が聞けるようにして楽しむこともできます。

v.0.4よりネットワークドライブの保存に対応しました。絶対パスは半角文字限定となるため、google driveに保存する場合は、プログラム本体をgoogle driveに配置して動作させてください。

起動時の初期値変更も可能

起動時の周波数、録音開始時刻、録音時間は、settings_fm.iniの書き換えにより変更出来るようにしています。

Windowsのメモ帳などで開いて編集し、[SECTION1]の値をお住まいの地域や放送局に合わせて適宜変更してください。

[DEFAULT] ↓DEFAULTはそのまましてください(変更しても反映されません)
data1  =  85.1
data2  =  12:30
data3  =  25

[SECTION1] ↓SECTION1の値が反映されます
data1  =  87.1 →受信周波数 XX.Xの形式で入力
data2  =  00:30 →録音開始時刻 YY:ZZの形式で入力、0時の場合は"00"と記載してください
data3  =  25 →録音時間 AA(分)の形式で入力
data4  =  .\record\ →保存先の絶対パス、または、相対パスを入力 2バイト文字は使えません

単体ソフトの使い方

jfm_recは GUIベースのプログラムですが、受信や録音はコマンドベースのソフトをサブプロセスで呼び出して、機能動作させています。

コマンドベースのソフト(fmradio_tuner, fjradio_recorder)についても、使い方を簡単に解説ておきます。

fmradio_tunerの使い方

FM放送の電波をサンプリングし、音声にデコードするプログラムです。スペクトラムアナライザ表示があるため、市販ラジオよりもかなり高機能です。ただし録音機能はサポートしていません。

GNUradio Commandプロンプトからは、以下のように入力して起動することが出来ます。

> jfmradio_tuner_01 <FREQ> <device arg.>

オプションの説明

  • FREQ: 周波数をMHzで指定します。(例:80.0)
  • device arg.: 受信に使うSDRを指定します。rtl-sdrが1台だけならrtl=0と入力します。

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

(単体ソフト) jfmradio_recorderの使い方

jfmradio_recorder.exeは、GNUradio環境のコマンドプロンプトより以下の形式で設定し、起動します。

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

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が1台だけならrtl=0と入力します。(間違っていても受信モジュールosmoSDRが探して受信してくれるようです)

現在は曜日指定までの仕様です。プログラムの変更により平日(weekday)などの設定も可能ですが、時刻や曜日を扱うプログラムは複雑になるため、仕様外としました。

既知の制約と課題

現状、筆者が確認している制約や課題は以下の通りです。いろいろ試行錯誤して制約を少しでも減らしていこうとは思います。

  • 予約実行後は予約プログラムの終了待ちとしておりウィンドウ上で予約解除は出来ません。予約解除はコマンドプロンプトよりCtrl+Cを入力してプログラムを強制終了してください。
  • 予約待機中にUSBチューナ-を脱着すると正常に動作しないことがあります。USBチューナーを脱着した場合は、ソフトを終了、再起動して再度予約してください。
  • PCがスリープ動作するとプログラムが正常動作できません。予約を行うPCは「常にオン」に設定しておいてください。
  • 残念ながらFMステレオ放送での受信はまだ出来ません。GNUradioのステレオ復調ブロックはノイズが入りますので使用していません。独自ブロックを作るスキルを身につけ次第、設計してみたいと思います。2022.3.27 やっと出来ました!音質が別物で感動しました。
  • 現在のプログラムは3本構成ですが、受信プログラムはGNUradioの生成コードを使っていることから、いまのところ1本化で動かす予定はありません。

プログラム改定来歴

v.0.6(2022.3.27)

ステレオ受信に対応しました。詳細はこちら

  • 画面仕様(GUI)にモノラル、ステレオの選択を追加
  • tuner, recorderにステレオ復調ブロックを追加

v.0.5(2022.3.13)

GUIを中心に仕様を変更しました。同時に不備も見直しました。詳細はこちら

  • 画面仕様(GUI)の刷新
  • 現在の番組表示機能を追加
  • iniファイル仕様の変更
  • 録音予約の中止の操作改善

v.0.4 (2022.2.26)

保存の仕様を変更(強化)しました。詳細はこちら

  • 保存先フォルダをsettings_fm.iniにて設定出来るようにしました。
  • pathに2バイト文字があるとエラーになりますのでpathは半角のみのサポートとなります。
  • 保存先に絶対パスを設定することでone driveやネットワークドライブにも対応します。(例:\\ROOM\share\documents\fm_record\)
  • google driveは絶対パスに全角文字が含まれるので保存先に設定出来ません。google driveに保存する場合はプログラム本体をgoogle driveに配置して起動してください。

v0.31 (2022.2.20)

  • 閲覧された方より、FMチューナーのバンドスコープが78MHz~95MHzになっており、76MHz台の周波数がスライダーで設定できないとのご指摘をいただきました。
  • 製作プログラムfmradio_tuner_01.exeの受信周波数範囲を76MHz~95MHzに修正し、アップロードファイルを差し替えております。以前にソフトをダウンロードされた方は、チューナー側のみ再度ダウンロードいただき差し替えをお願いします。

v.0.3

v.0.2→v.0.3における仕様変更は以下のとおりです。

  • FMラジオ受信ソフト(別途作成)を呼び出して現在の放送を視聴可能とした
  • 曜日選択をプルダウン方式に変更
  • 録音回数の設定を新設し、プルダウンによる選択方式とした
  • USBチューナー選択(入力デバイス選択)をプルダウンの選択方式とした

終わりに

本ソフトのリリース前にAMラジオ放送の受信機能も付加してみたのですが、USBチューナーの設定が異なるため、かなり使い勝手が悪くなってしまいましたので、AM放送とFM放送は分離してリリースすることにしました。

別途、語学放送の予約録音に使える「AMラジオの予約録音ソフト」もリリースしましたので、よろしければ閲覧してみてください。

機能についてお気付きの点(バグや設定ミスなど)やご要望があれば、本HPのお問い合わせページよりお知らせいただければ幸いです。

ダウンロードページにも掲載

ダウンロードページからもダウンロードすることが出来ますので、適宜ご利用ください。

紹介動画はこちら

Comming Soon!