MeloTTS が中国語で発話してしまう(M5Module-LLM)
初出: 2026-05-23 (解決) / 2026-05-24 (記録)
症状
スタックちゃんに日本語で話しかけたら、Claude (or Module-LLM 内蔵 LLM) は正しい日本語応答を返すのに、 音声合成 (TTS) だけ中国語の発音になる。
ログ例:
[main] kws_work_id=kws.1001
[main] llm_work_id=llm.1003
[main] melotts_work_id=melotts.1004
[main] voice pipeline ready, wake=HELLO
[cmd] claude:今日の調子はどう?
[claude] <- やあ、ぼく Donack だよ!...
[tts] speak: ... ← 日本語テキストが渡る
🔊 → 中国語イントネーションで再生される根本原因
M5Module-LLM ライブラリの ApiMelottsSetupConfig_t の model フィールドのデフォルトが melotts_zh-cn (中国語) になっている。language="ja_JP" 引数だけ渡しても モデルが zh-cn なので発音は中国語になる。
cpp
// 公式ライブラリのデフォルト (api_melotts.h)
struct ApiMelottsSetupConfig_t {
String model = "melotts_zh-cn"; // ← 中国語!
...
};対処
Step 1: モデル名を明示
cpp
m5_module_llm::ApiMelottsSetupConfig_t cfg;
cfg.model = "melotts_ja-jp"; // ← 明示しないと中国語のまま
cfg.input = {"tts.utf-8.stream", llm_work_id};
melotts_work_id = module_llm.melotts.setup(cfg, "melotts_setup", "ja_JP");Step 2: Module-LLM 側に日本語モデルパッケージが入っているか確認
これだけでは動かない場合、Linux 側に日本語モデルパッケージが無い可能性が高い。 Module-LLM ADB アクセス で SSH 的に入り、apt list --installed | grep melotts で確認:
llm-melotts-zh-cn/now 0.2 arm64 [installed,local] ← 中国語
llm-melotts/now 1.3 arm64 [installed,local] ← エンジン本体
# ↑ ja-jp が無いある場合: 設定だけで日本語化される。 無い場合: パッケージを追加 install する必要あり。
Step 3 (必要なら): Japanese パッケージを追加
bash
# Mac 側でダウンロード
curl -L "https://repo.llm.m5stack.com/m5stack-apt-repo/pool/jammy/ax630c/v1.6/lib-llm_1.6-m5stack1_arm64.deb" -o /tmp/lib-llm_1.6.deb
curl -L "https://repo.llm.m5stack.com/m5stack-apt-repo/pool/jammy/ax630c/v0.5/llm-model-melotts-ja-jp_0.5-m5stack1_arm64.deb" -o /tmp/melotts-ja.deb
# Module-LLM に push & install
adb push /tmp/*.deb /tmp/
adb shell "dpkg -i /tmp/lib-llm_1.6.deb /tmp/llm-model-melotts-ja-jp_0.5-m5stack1_arm64.deb"
adb shell "systemctl restart llm-sys llm-melotts llm-tts llm-audio"⚠ ただし 2026-05-24 時点で dpkg -i は通っても StackFlow daemon がモデルを認識できない ケースが確認されている (work_id 取得失敗 → 中国語 fallback)。詳しい因果は要追加調査。
本プロジェクトでの結論
Module-LLM 側 Japanese TTS の正規対応が不安定なので、 Mac Studio bridge で VOICEVOX (満別花丸) を使うハイブリッド構成 に切り替えた:
- 入力 (mic / KWS / STT): Module-LLM 側 (en_US wake word は安定)
- LLM: Claude Agent SDK (サブスクモード)
- TTS: Mac Studio の VOICEVOX → 24kHz 16bit PCM を WSS バイナリで CoreS3 に送る
- 出力: CoreS3 の I2S スピーカー (顔から声)
このほうが Donack 設計書 (満別花丸ボイス) とも一致するので結果オーライ。
詳細: VOICEVOX セットアップ
学び
- ライブラリのデフォルト値は油断ならない。multi-locale な API は明示が安全
- Module-LLM の StackFlow は モデルファイル単体ではなく daemon の再認識 が必要なケースがある
- 「日本語 TTS を入れるだけ」より「VOICEVOX に逃がす」のほうが結果的にプロジェクト全体の設計に合致した