sanoTTS-jp(マイコンで動く日本語 TTS)
55.9 万パラメータの日本語 TTS を ESP32-S3 の上だけで実時間より速く合成します。漢字かな交じり文の読みとアクセントの推定も端末の中で行います。
概要
論文「sanoTTS」(arXiv:2608.21378)の蒸留の手順を日本語に当てはめ、自作の TTS「piper-plus」を教師にして、55.9 万パラメータの日本語 TTS を作りました。M5Stack CoreS3(スタックチャン)にファームウェアを書き込み、シリアルで「今日は良い天気ですね。」と送るだけで喋ります。デモでは、マイコンに載っているのと同じ C99 のコードを WebAssembly にしてブラウザで動かしています。
担当
教師ラベルの生成から 3 つの小さなモデル(長さ・音響・波形)への蒸留、依存のない C99 の推論コア、端末内の G2P、ESP32-S3 のファームウェアと Arduino / PlatformIO 用ライブラリ、実機での計測、公開までを担当しました。公式実装(GPL-3.0)のコードは参照せず、論文と piper-plus の実装から独立に書いています。
技術的なポイント
- 重みは int8 で約 654KB です。推論は libm だけに依存し、
mallocを呼びません。 - 実機での実時間比(xRT)は 0.473 で、音が出始めるまで 407〜433ms、音の途切れは全文で 0 回でした。
- 英語版の手順をそのまま移すと漢字の読みで詰まるため、端末では「ひらがな+アクセント記号」を 877 バイトの表で音素に変える設計にしました。その後、TTS 専用の辞書形式(13.7MB)を作り、16MB の板では端末だけで漢字も読めます。
- 検証段階のもので、製品ではありません。コードは MIT、モデルの重みは MIT ではない別のライセンスです。
