🛠️

ESP32でにせJJY その(2) 昭和のJJY

2022/08/25に公開

(2021年10月くらいのはなし) その (1) は平成のJJY、つまり電波時計の基地局のにせものを作ろう、というプロジェクトであった。
こちらは昭和のJJY、つまり音声による時刻放送のにせものを作るプロジェクトである。

heiseijjy

ソースはこちら。

https://github.com/tarohs/heiseijjy

※ (2022. 8) このおもちゃ、Gitにソース掲載しようとしてみたところ、NTPと同期したりはしてませんでした (Bluetooth terminalでコマンドを与える。詳しくはソース参照w)。当時はESP32でNTP使う方法知らなかったからな〜。なんか内蔵クロックも使わず、RTCモジュールとか積んでますね。
というか、割とデモ的要素が強いので (時刻アナウンスはほんものより頻繁にしてるし)、好きな時間にセットして遊びましょう、という。

動作状況はこちら。

https://youtu.be/xr6dTNDWfaU

JJYとわたし

その(1)でもちらと書いたが、わしは音声放送のJJYを聴いて育った。
そのころ、アマチュア無線 (まあそれもかなり古典に属する趣味だけどね) に合格する・機材を買うお金がないへたれな子どもは、BCLといって短波ラジオで国内から海外までの放送局を受信する、という趣味の子が多かった。
十何ヶ国語を聴き取れるヨゼフ・ナジ氏 (ナショナルのBCLラジオの広告? に出ていた) に憧れ、受信した局にレポートを送ると送り返されてくる『ベリカード』を集めたり。

んな中で、わしのお気に入りは、10.000000MHzで1000Hzの信号を放送している、JJYという局であった。いうまでもなく、平成のはじめに音声放送をやめ電波時計局となる放送局の前身である。

ただ「つー つー」という信号を聴きながら、受験勉強とかしていたわけであるが。おかげで後年ドラムを叩くようになってから、四分音符 = 120のテンポだけはメトロノームに頼らず正確に叩けるようになったり、いまでも1分をそらで数えてだいたいプラスマイナス1秒くらいである。変な趣味だが役に立つものである (立たない?)。

この音声放送のJJYは、標準電波として貴重であったのはよく知られている。
わしのBCLラジオでもVFO (variable frequency oscilator) というのをオンにすると、局発の10MHzと標準電波の10MHzを音声のうなりで数Hz単位まで較正できる。まあ較正しても目盛りがアナログの幕が回転する方式だからあまり意味ないのだが。

あと、JJYのはなしで地質屋 (石油会社) の叔父と盛り上がったことがある。
その昔GPSで正確な時刻を知るとかできなかった時代には、人工地震とかで地質探査をするとき、針式のレコーダ (いまでも心電図などでみることができる。紙がつーっと流れていって、インクで紙に波形を記録する仕掛け) の、入力の1チャネルにJJYを入れておく。すると地震波形を記録する用紙に、1秒に1000の山が描かれる (!!) ので、それと地震波の波形を比較すると、1/1000秒まで発震時刻が特定できる、という、驚きのアナログ技術である。

さておき。
昭和のJJYの音声を、再現してみたいと思った。

昭和のJJYの音声

Wikipedia

https://ja.wikipedia.org/wiki/JJY#短波JJY

によると、正確には音声のJJYが停波したのは2001年なので、平成の初期まではこれだったことになる (ただしわし自身は1980年ころ以降、音声のJJYを聴いていない)。

「つー つー」とか「こっ こっ」のほかに、毎正時前の女声による「じぇーい じぇーい わぁーい じぇーい じぇーい わぁーい ○時0分 じぇーい えーす てぃー」続いてモールス信号、「ぽー (※ 59分59秒) つー つー」という音声がかっこよかった。
当時は詳しいフォーマットについてはあまりよく知らなかったが、Wikipediaによると「つー つー」というのは「こっ」と休みと「つー」の合成だったようで、確かにESP32でDACで音を作ってみたら、そう聴こえる。
これまた知らなかったが、「こっ」と「つー」の空白時間を利用してDUT1 (原子時計と地球の回転の差) とかも放送していたみたいで、いやはや。こんなことを令和の時代に初めて知ることになるとは。

サイン波の部分はテーブルに作って、ESP32のD/Aから出すことにする。
んで、問題は女声とモールス信号の部分だ。誰に喋ってもらおうか。
あれこれ探していたら……なんと、NICT (標準時刻・標準電波を出している機関) のページに、平成になってからの女声のサンプリングデータが掲載されているではないかwww。JJYも最後の頃は、テープに録音した音声を送出していたのではなく、サンプリング再生だったようだ (いや逆に現代では、テープに録音した音声を自動送出するほうがびっくり技術か)。

https://jjy.nict.go.jp/QandA/reference/JJYwav.html

ということで、ページタイトルとは異なるが、プロジェクト名は『昭和のJJY』ではなく『平成JJY』になってしまった。

ちなみにちょっとだけ残念なのは、これわしが昭和の時代に聴いていた女声とちょっと違うということ。当時はもっと、間延びした日本語英語な声で「じぇーい じぇーい わぁーい」と言っていた記憶があるのだが、平成のJJYのサンプルデータは、ややきりっ!! としている(笑)。

  • https://youtu.be/PJ38XcjQYtw に昭和バージョンのJJYの音声が残っていた。いやはやYoutubeには、どこかのどなたかが保存しておいてくれた貴重なものがいろいろある。

とにもかくにもオリジナルデータが手に入ったので、あとは再生するだけだ。
あとひとつの問題は、ESP32のD/Aから音声を出していたら、処理が煩雑になりすぎる。
いちおうプログラムは書いてみたが、簡単なマルチトラックのシーケンサっていうか、DTMのプログラムみたいなもんで、処理が煩雑になってしまった。

いろいろ調べていたら、DFRobotというメーカ (貧乏電子工作の味方みたいな中華マイコンパーツメーカだ) から、マイコンで制御できるMP3モジュール『DFPlayer mini』が売られている。Amazon日本で4つで1000円・翌日配送(笑)。

https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299

こいつは、TF (マイクロSD) カードに記録しておいたMP3ないしWAVファイルを、I2Cバス経由でトリガによってトラック単位で再生したり、情報を得たりすることができる。ただし再生位置といった細かな情報は取れないし細かく再生停止したり速度調整はできないので、マイコン本体と同期して再生させる目的には不向きだ。トラック再生開始も若干の遅延があるので、あくまでも『BGMをつける』程度の目的なら使える。
細かく再生・停止できないとはいってもまあ、JJYの「○時」「○分」「JST」くらいのぶつ切り音声を別トラック (別ファイル) に収録しておいて、時刻に応じて連続でトリガすれば、いちおうつながった言葉には聴こえる。NICT発のオリジナルデータに、あとモールス信号をPythonで作成して100トラックからのぶつ切り音声をマイクロSDに収録、トリガすれば、マルチトラックシーケンサの煩雑なプログラムとおさらばできる。本体のD/Aからは、JJYの時刻信号を出すだけ、条件によってDFPlayerのスタートをトリガするだけである。

なおNICT発の音声データは再配布が禁じられているので、DFPlayerの仕様に合うようにファイル名を変えてくれい (トリガしたいトラックに番号に合わせて「0001.wav」「0002.wav」……などとする。詳細はGitのreadme.mdに書いておいた)。

同時に直径3cmほどのミニスピーカ (4つで1500円) と、あと本体D/AとDFRobotのアナログ音声出力を加算・増幅するためのミニパワーアンプ (2つで500円) も購入、ちゃちゃっと配線して、バランスを取りながらスピーカから出せる簡易ミキサアンプを作った。配線は簡単すぎるので例によって、略。ちなみにDFPlayer本体にもパワーアンプは内蔵されているので、前者D/A信号をミックスしなければ単体でスピーカも駆動できる。

それから、いちおうNTP時計として視覚的に時刻も確認したいので、手持ちのSSD1331 (SPI)/ST7735 (SPI)/SSD1306 (I2C)を接続して、時刻表示できるようにもした。こいつらは、JJY本体やDFPlayerに比べて高い (1000円とか) ので、他 (Reaction & Diffusion装置とか) と共用できるように、ソケットで取り外しできるようにした。

さて……こうして昭和の (平成の) JJYを再現して流していると、わし個人的にはつい思い出に浸ってしまう。
と、職場で延々流しながら仕事をしていたら、後ろを通りかかった若者が「それ……ずっと聴いてると気が狂いそうですね」。
ええ。どうせ、狂ってますよ〜だ。

Discussion