
まえがき
数日オーダーの長さで音声と映像の同期を取り続ける実験を行う際、目視や聴覚で同期ズレを関知するためにはタイミング同期した光と音と音のパルス、また秒単位でのズレがないことを確認するために人間が耳で聞いて理解できるフォーマットでの時刻読み上げが必要となる。
これらの条件を満たす音声として NTT による時報サービスがあるが、電話経由で提供されるサービスのため接続料が掛かる、一定時間で自動的に接続が切断される、そもそも電話がある場所でしか使えないなどの課題がある。また、これらの問題を解決するために Web ベースでほぼ同等の機能を提供するサービスが存在するが、Web ブラウザというそれなりに高級な動作環境を要求するため動作環境に制約が掛かることが課題であった。
調布技研ではこれらの課題を解決するため、GNSS を時刻源とした時報生成装置を開発した。基幹部品として GNSS レシーバーと高度な音声出力機能を持つマイコンボード Spresense を採用することにより、簡便な操作で正確な時報を省電力で生成できるようになった。
本稿では GNSS 時報生成装置の構成について紹介する。
ねらい
構成
NTT 時報の特徴
人間が聞いてわかることを目標とした音声
次のチャイムが何時何分何秒かを告知→チャイム ただし次の告知が毎分0秒/30秒の場合、3秒前から別のチャイム音を鳴らすという例外
- 「午前(ごぜん)/8時(はちじ)/7分(ななふん)/40秒を(よんじゅうびょうを)/お知らせします(おしらせします)」→(8時7分40秒になった瞬間)ポーン
- 「午後(ごご)/11時(じゅういちじ)/48分(よんじゅう はっぷん)/10秒を(じゅうびょうを)/お知らせします(おしらせします)」→ポーン
- 「午前(ごぜん)/8時(はちじ)/ちょうどを(ちょうどを)/お知らせします(おしらせします)」→ポーン
また、電話での劣悪な伝送特性を考慮したものと思われる独特なイントネーションが採用されていることも特徴の一つである。
SPRESENSE の特徴
ソニーセミコンダクタソリューションズが開発・販売を行う IoT 向けボードコンピュータであり、ユーザーによるプログラム可能な Arm Cortex-M マイコンを搭載したデバイスであるが、他の一般的なボードコンピュータと比較して以下のような特徴を持つ。
- Cortex-M4F プロセッサーを 6 コア内蔵しており、各コアで独立した処理が可能
- RAM が 1.5MB 搭載されており、ある程度ヘビーなデータを伴う処理が可能
- 高品質な音声出力機能をボード単体として持つ。192 kHz での音声出力に対応するほか、ボード側に強力なオーディオアンプを搭載するため直接スピーカー駆動も可能
- 高性能な GNSS 受信機能を持つ。GPS や QZSS による L1-C/A 信号の他、SBAS、QZSS L1S など、日本国内において有用と思われる信号にはほとんど対応しており、アンテナ次第で極めて優れた受信性能を発揮する
今回開発した GNSS 時報生成装置はこれらの特徴を活かした構成となっている。GNSS と音声出力機能が SPRESENSE 本体で完結するため、電子回路として新たに開発する必要があるのは操作インターフェースとレベル変換回路、電源回路程度であり極めてシンプルな構成とできた。

時刻読み上げ音声
NTT 時報を模倣したプロダクトを作ることを考えた場合、まず問題になるのが時刻読み上げを行う音源の調達である。NTT 時報サービスにおいてはプロのアナウンサーによる読み上げ音源が使用されている1が、本プロジェクトにおいては VOICEVOX による合成音声を使用した。
VOICEVOX は無償で利用可能なテキスト読み上げ・歌声合成ソフトウェアであり、複数のキャラクターから好みのものを選び、テキストを入力するだけで高品質なテキスト読み上げが行えることから、動画サイトにおけるナレーション生成などに広く活用されている。
類似の無償ソフトウェアにおいては、音声合成に用いるパラメータとして読み上げ対象のテキスト程度しか与えられないケースが多いところ、VOICEVOX ではイントネーションや音高、抑揚の指示など多数のパラメータが調整可能である。
前述の通り NTT 時報では独特なイントネーションが採用されている。時報読み上げに必要な語句のパターンが高々 50 程度しかないことから、考え得る語句のパターンを VOICEVOX に全て入力し、録音した NTT 時報音源と聞き比べながらパラメータ調整を行っていくことで概ね NTT 時報と同等と言える音源を生成できた。

試作機の写真
チャイム音の作成
WaveSpectra に食わせて周波数特定、WaveGene で同一周波数の音を作ったあと Audacity で適宜フェードアウト効果を適用して作った
音声出力方式の検討
出力する音声は SPRESENSE の CPU においてソフトウェア的に合成している
SPRESENSE においては内部で2つの音声ソースをミックスする機能があるが、同時発音されうる音声について検討すると
- ナレーション
- 10秒単位チャイム音の残響(2秒程度)
- 秒告知用チャイム
の3つがある。つまり最大3つの独立した音声ソースを同時に再生する必要があり、これは SPRESENSE のミキサー機能だけでは達成できない。
SPRESENSE においてミックスできる音声ソースがステレオ音源であることを活用し、左右チャンネルにそれぞれ別音声を割り当てて最後にモノラルへミックスすることで可能であるが、構成が複雑になる上最後にアナログ的なミックスが発生するため採用しなかった。
音声ソースは PCM であるため、基本的には各サンプルを加算するだけで各チャンネルの音声が合成できること、オーディオコアへの引き渡し時にはメモリ上にデータが載っている必要があるためどのみち microSD カードへのアクセスは発生すること、CPU が十分に高速でありナレーションが流れていない期間内で読み込みと合成処理を終えることが可能なことなどから、愚直な合成方法を採用するに至った。
チャイム・ナレーション音源の読み込み
SPRESENSE では音声出力に通常モードと低遅延モードの2種類がある。時報を作るという目標から可能な限り任意のタイミングで音声を再生するため低遅延モードを選択したが、この場合に対応する音声ソースは 44.1kHz 2ch PCM のみとなり、今回のような細切れの音源ファイルをテンポ良く再生していくにはストレージからの読み込み遅延が大きな問題となってくる。
SPRESENSE に搭載されている RAM に余裕があるため、長さが高々2秒程度、かつ頻繁に鳴動する 秒告知・10秒単位告知・0秒/30秒予告チャイム の3種類については起動時に microSD から RAM へ転送しておき、microSD へのアクセス待ち時間を削減する方針とした。
一方、ナレーションは1~2秒程度の音源ファイルを6個程度、頭から順に再生していく必要がある。
マルチコアの活用
SDHCI を用いた microSD へのアクセスと音声出力ロジックへはメインコアからのみアクセス可能であるため、音声読み込み-合成処理-音声出力処理はメインコア上で行っている。このうち合成処理についてはサブコアに逃がすことが可能であるはずだが、前述の通りメインコアで行っても間に合うことと無用に複雑化するのを避けるため現状の構成となっている。
装置として仕立てるにあたり有機 EL による画面表示とプッシュスイッチ等による設定インターフェースを実装したが、これらのハンドリングは全てサブコアで行った。前述した SDHCI や音声出力などの高度なインターフェースではない、単なる GPIO や I2C 等の簡易なインターフェースであればサブコアから取り扱うことも可能であるためこの構成が実現した。
コア間での同期を取る手段としてメッセージキューがある。これは各コア間でメッセージIDと32bitの即値を受け渡すためのインターフェースであり、