TTS Models Overview
参照元: LiveKit Agents Documentation ロードマップ: 学習ロードマップ
What(何についてか)
LiveKit Agentsの音声合成(TTS)は、LLMが生成したテキスト応答を音声に変換するパイプラインの最終段に位置するコンポーネントである。音声プロファイル(voice)で話者のトーンやアクセントを制御し、エージェントが「喋る」ための仕組みを提供する。
TTSの利用ルートは2つある。LiveKit Inference経由(API Key不要、LiveKit Cloudが管理)と、Plugin経由(自前API Key、voice clone等のカスタム機能対応)である。
Why(なぜ必要か)
エージェントの音声出力はUXに直結する。STT(聞き取り)→ LLM(思考)→ TTS(発話)というパイプラインの末尾であり、モデル選択とvoice選択がエージェントのキャラクターを決定づける。対応言語、レイテンシ、品質の3軸でプロバイダーを選ぶ必要がある。
How(どう動くか)
AgentSession の tts パラメータにモデルとvoiceを指定して渡す。Inferenceの場合は inference.TTS(model=..., voice=..., language=...) を使い、Pluginの場合は各プロバイダーのプラグインクラス(例: cartesia.TTS())を使う。
from livekit.agents import AgentSession, inference
session = AgentSession(
tts=inference.TTS(
model="cartesia/sonic-3",
voice="9626c31c-bec5-4cca-baa8-f8ba9e84c8bc",
language="en",
),
)LiveKit Inference対応モデル
6プロバイダー、20以上のモデルがInference経由で利用できる。主要なモデルを以下に整理する。
Cartesia
Sonic系がメインラインナップ。Sonic 3は30以上の言語に対応し、最も対応言語が広い。日付付きバージョン(例: cartesia/sonic-3-2026-01-12)はスナップショットで、モデル更新による挙動変化を防ぐ用途に使う。Sonic Turboは低レイテンシ向け。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Sonic | cartesia/sonic | 14言語対応 |
| Sonic 2 | cartesia/sonic-2 | 14言語対応 |
| Sonic 3 | cartesia/sonic-3 | 30+言語対応、最も広い |
| Sonic Turbo | cartesia/sonic-turbo | 低レイテンシ、14言語 |
Deepgram
Aura-2が現行モデル。Aura-1はRetired。日本語対応(ja-JP)。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Aura-2 | deepgram/aura-2 | 多言語、日本語対応 |
| Aura-1 | deepgram/aura | Retired(使用不可) |
ElevenLabs
Flash / Turbo系が低レイテンシ向け、Multilingual系が多言語向け。v2.5世代から多言語対応が拡大。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Eleven Flash v2 | elevenlabs/eleven_flash_v2 | 英語のみ、高速 |
| Eleven Flash v2.5 | elevenlabs/eleven_flash_v2_5 | 29言語、高速 |
| Eleven Turbo v2.5 | elevenlabs/eleven_turbo_v2_5 | 29言語、高速 |
| Eleven Multilingual v2 | elevenlabs/eleven_multilingual_v2 | 25言語 |
Inworld
TTS 1系と1.5系がある。Max/Miniで品質と速度のトレードオフを選べる。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Inworld TTS 1 | inworld/inworld-tts-1 | 13言語 |
| Inworld TTS 1.5 Max | inworld/inworld-tts-1.5-max | 高品質、13言語 |
| Inworld TTS 1.5 Mini | inworld/inworld-tts-1.5-mini | 軽量、13言語 |
Rime
Mist系のバージョン展開。Arcanaは多言語向け。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Arcana | rime/arcana | 8言語(日本語含む) |
| Mist v3 | rime/mistv3 | 5言語 |
xAI
単一モデル xai/tts-1。auto-detect対応で多言語(日本語含む)。
| モデル名 | モデルID | 特徴 |
|---|---|---|
| Text to Speech | xai/tts-1 | auto-detect、18言語 |
Suggested Voices
各プロバイダーから品質とパフォーマンスのバランスが良いと推奨される音声プロファイル。UI上で検索・性別フィルタ・試聴が可能。voice ID(UUID)をコピーして voice パラメータに渡す。各プロバイダーの公式ドキュメントにはより多くの音声がある。
Plugins
Inference以外に30以上のオープンソースプラグインが存在。自前のAPI Keyで直接プロバイダーに接続する。voice clone等のカスタム機能が必要な場合に利用する。Python対応数がNode.jsを大きく上回る。
Python/Node.js両対応の主要プラグイン: Cartesia, Deepgram, ElevenLabs, OpenAI, Inworld, Rime, Resemble AI, Sarvam, Neuphonic。
Standalone Usage
AgentSession のパイプライン外でTTSを単体利用できる。tts.stream() でストリームを作成し、push_text() でテキストを投入、SynthesizedAudio として音声フレームを消費する。文境界(segment boundary)のイベントも含まれるため、再生位置のトラッキングに活用できる。
tts = cartesia.TTS(model="sonic-english")
tts_stream = tts.stream()
asyncio.create_task(send_audio(tts_stream))
async for text in text_stream:
tts_stream.push_text(text)
tts_stream.end_input()LanguageCodeの正規化
すべてのTTSプラグインとInferenceは LanguageCode 型で言語を指定する。この型は複数の形式を自動的にBCP-47に正規化するため、プロバイダーごとの形式差異を気にする必要がない。
対応形式: ISO 639-1("en")、BCP-47("en-US")、ISO 639-3("eng")、言語名("english")、アンダースコア区切り("en_us" → "en-US")。
Pythonでは LanguageCode は str のサブクラスで、.language(ベース言語)、.region(地域サブタグ)、.iso(ISO 639-1 + 地域)のプロパティを提供する。
Custom TTS
既存のプラグインやInferenceで要件を満たせない場合、Pipeline Nodesの tts_node をオーバーライドして独自TTS実装を差し込める。
実装時の判断軸
graph TD A["TTS選択"] --> B{"Inference or Plugin?"} B -->|"手軽さ優先"| C["Inference<br/>API Key不要"] B -->|"カスタム音声/clone"| D["Plugin<br/>自前API Key"] C --> E{"対応言語・品質・レイテンシ"} D --> E E --> F["モデル決定"] F --> G["Voice選択<br/>Suggested Voices"] G --> H["LanguageCodeで言語指定"]
まずInference or Pluginを決め、次に対応言語とレイテンシの要件でモデルを絞り、最後にvoice IDで話者を決定する。言語指定はLanguageCodeが正規化するため形式を気にしなくてよい。