自作FMラジオ予約録音ソフトをステレオ対応にしました

Radio

自作しているFMラジオ予約録音ソフトをステレオ受信に対応しました。

ステレオ受信は予約録音ソフトの製作当初からやりたいと思っており、GNURadioのリファレンス回路どおりに作ってもステレオ復調が出来ず後回しにしていましたが、いろいろと調べて原理どおりにフローを組むことでようやく機能を実装することが出来ました。

ステレオ受信は復調回路に演算が必要であるため、SDR#やHDSDRなどの汎用SDRソフトには装備されておらず、おそらく当ソフト独自の機能となります。

必要機材と環境

  • Windows10 PC:モノラル受信はたいてい動作可(Celeron/AtomでもOK)、ステレオ受信はintel Core i7クラス(4コア8スレッド以上)が必要
  • USBチューナー:RTL-SDR.COM V3, RTL2832 USBチューナ, HackRF oneにて動作確認済み
  • USBチューナーのドライバー:Zadig(フリーソフト)を使います。ドライバーの入手とインストール方法はこちらの記事を参照ください。
  • FMアンテナ:RTL-SDR.COM V3のセット付属品で十分です。

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

本ソフト(jfm_rec)はファイル単体で動作しますので、Windowsへのインストールは不要です。

当サイトのダウンロードページからzip形式のファイルを2つダウンロードし、適当なフォルダに展開してください。展開が終わったらfmradio_tuner_02.exeを移動し、下図のように一つのフォルダ集めてください。

※ラジオ予約録音ソフトのダウンロードはこちらから

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

プログラムとフォルダの説明

  • recordフォルダ:録音したファイルを保存するフォルダです。
  • sourceフォルダ:本プログラムのソース(python)ファイルです。版権の関係で添付していますので、削除しても構いません。
  • jfm_rec_06a.exe:プログラム本体です。
  • fmradio_tuner_02.exe:現在のFM放送を聞くためのチューナーソフトです。
  • jfmradio_recoder_06a.exe:予約録音するためのチューナーソフトです。
  • settings_fm.ini:放送局と起動時の初期値設定を記載するイニシャルファイルです。関東にお住まいの方はsettings_fm_kanto.iniをsettings_fm.iniにリネームしてください
改定来歴
  • 2022.4.10 ver.06a :曜日選択に「平日」を追加、GUIフォントサイズの見直し

画面仕様(GUI)の説明

Ver.0.4までは受信周波数を指示するユーザーインタフェースでしたが、Ver.0.5よりチャンネル名をクリックする方式に刷新しています。以下は東京の初期設定ファイルで起動したときの画面です。

  • 受信放送局:最大10局を登録できます。設定はiniファイルにチャンネルの情報を記載してください。背景色もiniファイルで選択できますので、従来放送(90MHzまで)とワイドFM放送(90MHz以上)を見分けられるようにしています。
  • 予約曜日ラジオボタン:録音予約する曜日はラジオボタンから選びます。初期値は日曜日(固定)です。
  • 開始時刻、録音時間:予約録音する開始時刻と録音時間を設定します。初期値はiniファイルで変更できます。
  • 録音回数:同じ番組を繰り返し録音回数です。Windowsは、アップデートがあると自動再起動するため、あまり回数は増やさない方がよいです。
  • チューナー選択:USBチューナーのデバイス設定です。RTL2832チューナーならrtl=0を選択します。(通常はデフォルトのまま)
  • 受信方式:モノラル、ステレオの切替です。ステレオはハイスペックPCでないときれいに録音出来ませんので予約前に試聴してください。初期値はモノラルです。
  • 「FM放送を聴く」:選択されている放送局にあわせてチューナーを起動します。
  • 「FM放送を予約」:画面に設定された内容にあわせて予約録音ソフトを起動します。起動後は設定画面に戻れませんので、中止する場合はコマンド画面でCtrl+Cでプログラムを終了してください。
  • 現在の番組表表示を追加:2016年で終了した見えるラジオという現在の放送内容を表示する機能をネット受信にて番組表を表示する形で再現しています。番組名と出演者がすぐ分かるので楽しみの幅が広がります。
  • 注意事項:予約録音機能を使う場合はPCを「常にオン」の設定にしてください。PCがスリープすると、USBチューナーの接続がロストして再起動が必要になります。

とりあえず使って見る

「jfm_rec_06.exe」をダブルクリックしてソフトを起動し、「FM放送を聴く」をクリックして、以下の受信画面が表示されれば受信できています。(初回起動時はWindowsのセキュリティ警告が出ますので許可してあげてください。)

受信画面が出ない場合は、USBチューナーが接続されていないか、正常にドライバーがインストール出来ていないと思われますので、再度チェックしてください。

受信周波数はスライダーで可変出来ますので、スペクトラム・アナライザをみながら放送チャンネルをあわせることも可能です。スケルチ(無信号時の音声カット)は実装していませんので、無信号時の雑音音量には十分注意してください。

ステレオ受信を選択した場合は、音声のスペクトラム・アナライザも表示します。ステレオボタンでモノラルとステレオが切替出来ますので、波形の変化をみて楽しむことも出来ます。

ステレオはある程度の受信電界強度がないとノイズが混入します。アンテナはできるだけ高所で屋外との遮蔽物がない場所に設置するなどの工夫をしてください。

録音予約は、予約日時等の各種設定をして「FM放送を予約」をクリックすると予約状態になります。すべての予約スケジュールが録音できると自動終了します。予約を中止する場合は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
87.1 00:30 6 25 1 rtl=0 KISS_FM Mono
jfmradio_recorder_06 87.1 00:30 6 25 1 rtl=0 KISS_FM Mono
FM Radio Recorder Ver.0.6 Copyright 2022 falconblog.org. All rights reserved.
モノラルで録音します
予約スケジュール: 曜日=日(録音回数=1) 開始時刻=00:30 録音時間=25.0分
予約キャンセル:Ctrl +Cで強制停止 →ここでCtrl+Cを入力

番組の表示機能について

インターネットよりradiko_v3 APIをxml形式で受信し、GUIに現在の番組を表示できるようにしています。表示内容は番組名と出演者のみです。

番組受信に使ったradikoのAPIバージョンはv3です。受信チャンネルは都道府県ごとに分けて配信される仕様であるため、この機能を使う場合はお住まいの地域に合わせてiniファイルで設定してください。

radikoから受信するxmlファイルの番号部分(JP13.xmlの13)は、お住まいの都道府県により番号が異なる仕様です。都道府県番号は、都道府県の番号は総務省のHPより参照できますので、適宜設定してください。

# radiko 受信ファイル tokyo:13 osaka:27 
data5 = http://radiko.jp/v3/program/now/JP27.xml →大阪はJP27
# data5 = http://radiko.jp/v3/program/now/JP13.xml →大阪はJP27

PCがインターネットが繋がっていない場合は、番組欄に「受信出来ません」と表示します。radikoの配信仕様に変更が生じた場合は、正しく表示できなくなる可能性がありますので適宜修正する予定です。

ごく稀ですがファイルが中途で途切れるとxml解析でエラーとなりプログラムが異常終了することがあります。作者の環境ではデバッグ環境でしか発生しないためとりあえず様子見します。

iniファイルの記載方法について

iniファイルで初期値を変更することにより、GUIで表示される初期値を任意の値に変更でき、設定操作を減らすことが出来ます。

SECTION1は初期値設定を記載します。iniファイル内にはコメントを記載していますので、お好みの内容に修正してください。

 

[SECTION1]
# 録音開始時刻 初期値
data2  =  00:30
# 録音時間 初期値
data3  =  25
# 録音保存先(パス)
data4  =  .\record\
# radiko 受信ファイル tokyo:13 osaka:27 
data5 = http://radiko.jp/v3/program/now/JP27.xml
# data5 = http://radiko.jp/v3/program/now/JP13.xml

data5は録音保存先のパスになります。最後の「\」はつけ忘れないように注意してください。ファイルパスは、日本語文字(2バイト文字)に対応していませんので、半角英数字のみ設定可能です。

絶対パスが付与されるネットワークドライブ保存には対応していますが、クラウドドライブの対応についてはOneドライブ:対応可、Googleドライブ:制約ありとなります。

Googleドライブを使う場合は、下図のようにソフト本体をGoogleドライブ内に移して、ソフトを起動することで保存可能になります。Googleドライブに保存すると外出先のスマホから録音データが聴けるようになりとても便利です。

放送局のチャンネル設定は[CH1]~[CH10]に記述します。

受信局の放送局名と周波数は総務省のFM局・ワイドFM局一覧を参照して記入すると容易です。チャンネルは10局すべて設定してください。10局に満たない場合は、[CH11]に記載するダミー設定を記載してください。

radikoの番組表IDは、xmlの内容を読まないとわかリませんので、今回のリリースでは近畿と東京のみ準備しました。関東にお住まいの方は「settings_kanto_fm.ini」を「settings_fm.ini」にリネームするだけで使えると思います。その他の地域は、ご要望があれば作りたいと思いますので、お問い合わせ欄からお知らせください。

またradikoに加盟していない放送局は、番組表の配信がありません。その場合は番組表は表示できませんのでchannel_idは適当な値を入れておいてください。

[CH1]
#FM大阪 コメントです
channel_id = FMO radikoのチャンネルid名 番組表の解析につかいます
channel = FM大阪 GUIに表示する放送局名です 
freq = 85.1 受信周波数です
file_name = FM_OSAKA 録音保存時のファイル接頭文字です
back_color = background-color: #f3cac9 放送局名の背景色です 16進コードです
・---・---・---・---・---・---・---・---・---
[CH10] CH10まで設定します
#KBS京都
channel_id = KBS
channel = KBS京都(ワイドFM)
freq = 94.9
file_name = KBS_KYOTO
back_color = background-color: #ffcf54
・---・---・---・---・---・---・---・---・---
[CH11]
#デバッグ
channel_id = ABC
channel = デバッグ
freq = 80.2
#dulation = 15
file_name = DEBUG
#week_table = 1
back_color = background-color: #f3cac9

今後の課題

ステレオ受信により信号処理関係の技術課題はクリアできたと思います。まだ課題はいくつかありますのでpythonプログラムを勉強して継続取組中です。

  • ラジオ録音ファイルのmp3化:mp3化はffmpegやvlcを使う予定ですが、変換ソフトをPCにインストールする必要があるため、変換する/しないの切替をつけル必要があり仕様を検討中です。
  • 予約キャンセルのGUI化:ver.0.5より、コマンドウインドウでの予約キャンセルはできるように出来たものの、プログラム構造の制約によりGUI画面も終了するので最初から設定やり直しになってしまいます。GUI画面だけで予約キャンセルも行えるようプログラムの構造を再検討中です。
  • FM放送のステレオ受信:GNURadioの制約によりFM放送なのにモノラル受信です。日本のFM放送は少々特殊らしく、独自ブロックを作る必要があります。 Ver.0.6で実装!
  • Androidアプリ化:現在の最終目標です。原理的には手に負える範囲ですが、まだ環境も構築できていません。

以上、自作ラジオ録音ソフトの紹介でした。