Skip to content

TTSパイプライン

N.E.K.O. は複数のTTS(Text-to-Speech)プロバイダーをサポートしており、統一されたキューベースのアーキテクチャによってストリーミング音声出力とリアルタイム割り込みを実現しています。

アーキテクチャ

LLM text output


TTS Request Queue ──> TTS Worker Thread

                      ┌────┼────────────┐
                      │    │            │
                      ▼    ▼            ▼
                  CosyVoice  GPT-SoVITS  Custom
                  (DashScope) (Local)     Endpoint
                      │    │            │
                      └────┼────────────┘

                      TTS Response Queue

                      Audio Resampler (24→48 kHz)

                      WebSocket ──> Browser

サポートされるプロバイダー

プロバイダータイプ特徴
DashScope CosyVoiceクラウドAPI高品質、音声クローン、複数のボイストーン
DashScope TTS V2クラウドAPI高速、低レイテンシ
GPT-SoVITSローカルサービス完全オフライン、カスタマイズ可能
カスタムエンドポイントユーザー定義任意のOpenAI互換TTS API

キューベースのストリーミング

TTSパイプラインはプロデューサー・コンシューマーパターンを使用します:

  1. プロデューサー(メインスレッド):LLMがテキスト出力をストリーミングすると、完成した文が tts_request_queue にエンキューされます。
  2. コンシューマー(TTSワーカースレッド):テキストをデキューし、音声を合成し、PCMチャンクを tts_response_queue にエンキューします。
  3. センダー(メインスレッド):音声チャンクをデキューし、24kHzから48kHzにリサンプリングし、WebSocket経由で送信します。

割り込み処理

キャラクターがまだ話している最中にユーザーが話し始めた場合:

  1. LLMプロバイダーが on_interrupt イベントを発火
  2. 両方のTTSキューが即座にフラッシュ
  3. 保留中の音声が破棄
  4. システムは新しいユーザー入力を受け付ける準備完了

音声クローン

ユーザーは約15秒のクリーンな音声サンプルをアップロードすることで、カスタムボイスを作成できます:

  1. /api/characters/voice_clone 経由で音声をアップロード(マルチパートフォーム)
  2. 音声がDashScopeの音声クローンAPIに送信
  3. 一意の voice_id が返され、キャラクター設定に保存
  4. そのキャラクターの以降のTTSリクエストはすべてクローンされたボイスを使用

音声フォーマット

パラメーター
LLM出力サンプルレート24,000 Hz
ブラウザ再生レート48,000 Hz
フォーマットPCM 16ビット符号付きリトルエンディアン
チャンネルモノラル
リサンプラーsoxr(高品質)

無料ボイス

N.E.K.O. にはカスタムAPIキーが不要な組み込みボイストーンが含まれています:

名称(中国語)Voice ID
俏皮女孩(おちゃめな女の子)voice-tone-OdVwaw2Az2
可爱女孩(かわいい女の子)voice-tone-OdVwrbG3No
可爱少女(かわいい少女)voice-tone-OdVx7X482K
温柔少女(優しい少女)voice-tone-OdVyxjm0lk
清冷御姐(クールなお姉さん)voice-tone-OdVyPmim9I
他5つ...

MIT ライセンスの下で公開。