ずっと無料!RTL-SDRを用いたFMラジオ予約録音ソフトの製作

Radio

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

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

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

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

v0.2からの変更点

前回のv0.2からの仕様変更点は以下のとおりです。現在の放送を受信して、電波の強度などを確認出来るようになり、実用性が向上したと思います。

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

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

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

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

FMラジオは帯域が広く、それほど周波数精度も求められないので、USBチューナーは安価なものでも十分です。

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

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

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

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

ソフトウェアは3つのプログラムで構成していますので、下部のリンクよりダウンロードしてください。exe化により容量が大きくなっていますのでネット環境に注意してください。

  • jfm_rec_03, jfmradio_recorder_03:GUIソフト本体と予約録音プログラム(69MB)
  • jfmradio_tuner01:現在の放送受信プログラム(83MB)

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

本ソフトはPCのプログラムフォルダへインストールする必要はありませんが、3つとも同一フォルダにいれてください。展開先のフォルダを開いてファイルが以下の構成であれば大丈夫です。

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

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

本ソフトの使用方法

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

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

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

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

ソフトを起動する

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

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

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

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.3 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ファイルは容量が大きいため、fre:ac audio converterなどのフリーソフトでmp3形式に圧縮変換しておくと容量を減らすことが出来ます。

筆者はmp3データをSDカードに保存して、カーナビで録音したラジオ放送が聞けるようにして楽しんでいます。

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

起動時の周波数、録音開始時刻、録音時間は、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(分)の形式で入力

単体ソフトの使い方

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_03.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のステレオ復調ブロックはノイズが入りますので使用していません。独自ブロックを作るスキルを身につけ次第、設計してみたいと思います。
  • 現在のプログラムは3本構成ですが、受信プログラムはGNUradioの生成コードを使っていることから、いまのところ1本化で動かす予定はありません。

終わりに

PyQt5をもっと活用するために追加機能を考えてバージョンアップしてみました。

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

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

機能について何かご要望があれば、本HPのお問い合わせページよりお知らせいただければ幸いです。

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

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

紹介動画はこちら

Comming Soon!