この記事は筆者オンリーのAdvent Calendar 202513日目の記事です。
RustでSIP通話を受けて、ASR→LLM→音声合成→相手に返す、という音声ボットを作っています。
この記事は 音声合成(TTS) パートの話だけを、ざっくり紹介します。
結論:ずんだもんを使うならVOICEVOX一択
今回のボットは ずんだもん に喋らせたいので、音声合成は実質 VOICEVOX一択 でした。
- ずんだもん音声がそのまま使える
- 日本語が自然で、会話ボット向き
- ローカルで動かせる(構成次第で音声を外に出さない)
- エンジンがHTTP APIなので、Rustからでも叩きやすい
「ずんだもんで喋らせる」を最優先にすると、選定で悩む余地がほぼなくなります。
ざっくり仕組み(どう使うか)
VOICEVOXは大きく「エンジン(音声合成サーバ)」を立てて、HTTPで合成します。
使い方の流れは基本これだけ:
- 話者(スタイル)一覧を取る(ずんだもん等、どの声で喋らせるか決める)
- 文章から“合成用クエリ”を作る(イントネーション等のパラメータ入り)
- クエリを渡してWAVを生成する
つまり、テキストを投げて終わりというより
「クエリ生成 → 合成」の2段階になってる、くらいの理解でOKです。
SIP音声ボット目線のメモ(超ざっくり)
- 返答を一気に長文合成すると待ちが長くなるので、短く区切って順に喋らせると会話っぽくなる
(例:「。」や改行で分割) - 定型文(挨拶・案内)をよく使うなら、音声をキャッシュすると安定する
- 起動直後の1回目が重いことがあるので、必要なら warm-up(ダミーで一度合成)もアリ