Kokoro TTS
Kokoro-82Mは、ISTFTNetボコーダーを備えたStyleTTS 2ベースの軽量、非自己回帰の音声合成モデルです。CoreML経由で完全にNeural Engine上で動作し、テキスト入力からシングルフォワードパスで自然な24 kHz音声を生成します。
iOS対応
Kokoro-82Mはオンデバイスiosデプロイメント向けに設計されています。82Mパラメーター(1バケット、INT8で約80 MB)で、iPhoneとiPadに快適に収まります。CoreMLはNeural Engine上で動作し、他のタスクのためにGPUを解放します。
サポート言語
| 言語 | コード | 例ボイス |
|---|---|---|
| 英語 (US) | en | af_heart, am_adam, af_sky |
| 英語 (UK) | en | bf_emma, bm_george |
| スペイン語 | es | ef_dora |
| フランス語 | fr | ff_siwis |
| ヒンディー語 | hi | hf_alpha, hm_omega |
| イタリア語 | it | if_sara |
| 日本語 | ja | jf_alpha, jm_omega |
| ポルトガル語 | pt | pf_dora |
| 中国語 | zh | zf_xiaobei, zm_yunjian |
| 韓国語 | ko | kf_somi |
合計50のプリセットボイス。ボイス命名規則:[言語][性別]_[名前] — 例:af_heart = American Female "Heart"。
アーキテクチャ
Kokoroは3段階のCoreMLパイプラインを使用します。サンプリングループなし — すべての段階は非自己回帰のフォワードパスで、段階1と2の間にSwift側の整列ステップがあります。
3段階パイプライン
| ステージ | モデル | 入力 | 出力 |
|---|---|---|---|
| 1. Duration | duration.mlmodelc | 音素トークン + ボイスembedding + 速度 | 継続時間、韻律特徴量、テキストエンコーディング |
| — | Swift整列 | 継続時間 + ステージ1特徴量 | 整列された韻律 & テキスト特徴量 |
| 2. Prosody | prosody.mlmodelc | 整列された韻律特徴量 + スタイル | F0(ピッチ)+ ノイズ予測 |
| 3. Decoder | decoder_*.mlmodelc | 整列されたテキスト + F0 + ノイズ + スタイル | 24 kHz音声波形 |
音素バケット(Durationモデル)
Durationモデルは列挙された入力形状を使用します。入力は、それに収まる最小のバケットにパディングされます:
| バケット | 最大音素 | ユースケース |
|---|---|---|
| p16 | 16 | 短いフレーズ |
| p32 | 32 | 短い文 |
| p64 | 64 | 中程度の文 |
| p128 | 128 | 長い文 |
Decoderバケット
異なる最大音声長のための固定形状デコーダーモデル(各フレーム = 24 kHzで600サンプル):
| バケット | 最大フレーム | 最大音声 |
|---|---|---|
decoder_5s | 200 | 5.0秒 |
decoder_10s | 400 | 10.0秒 |
decoder_15s | 600 | 15.0秒 |
iOS 18+ / macOS 15+が必要です。
Phonemizer
テキストは3層パイプライン経由で音素トークンに変換されます — すべてApache-2.0ライセンス、GPL依存なし:
- 辞書検索 — 異音字サポート付きの米国英語と英国英語の発音辞書
- 接尾辞語幹化 — 既知の接尾辞(例:「-ing」、「-tion」)の形態論的分解
- BART G2P — 語彙外単語のための別のCoreMLエンコーダー-デコーダーモデルを使用したニューラル書記素-音素フォールバック
モデルウェイト
| コンポーネント | サイズ | 形式 |
|---|---|---|
| Durationモデル | 約39 MB | .mlmodelc |
| Prosodyモデル | 約17 MB | .mlmodelc |
| Decoderモデル(3バケット) | 各約107 MB | .mlmodelc |
| ボイスembedding(54ボイス) | 約0.3 MB | JSON (256次元 Float32) |
| G2Pエンコーダー + デコーダー | 約1.5 MB | .mlmodelc |
| 辞書 + 語彙 | 約6 MB | JSON |
| 合計(1デコーダー) | 約170 MB |
パフォーマンス
| 指標 | 値 |
|---|---|
| パラメーター | 82M |
| 推論バックエンド | CoreML (Neural Engine) |
| 推論 RTFx | 約0.7(リアルタイムより高速) |
| 出力サンプリングレート | 24 kHz |
| ウェイトメモリ | 約170 MB(1デコーダーバケット) |
非自己回帰
Qwen3-TTSやCosyVoice3がトークンをステップバイステップで生成するのとは異なり、Kokoroはサンプリングループなしの3段階パイプラインを使用します。すべてのステージは決定論的なフォワードパスです。
CLIの使用法
audio kokoro "Hello, world!" --voice af_heart --output hello.wav
オプション
| オプション | デフォルト | 説明 |
|---|---|---|
<text> | 合成するテキスト | |
--voice | af_heart | ボイスプリセット名 |
--language | en | 言語コード:en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | 出力WAVファイルパス |
--list-voices | 利用可能なすべてのボイスをリストして終了 | |
--model, -m | HuggingFaceモデルID |
例
# デフォルトボイスでの英語
audio kokoro "Hello, how are you today?" --output hello.wav
# フランス語
audio kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav
# 日本語
audio kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav
# 全50ボイスをリスト
audio kokoro --list-voices
Swift API
import KokoroTTS
import AudioCommon
let tts = try await KokoroTTSModel.fromPretrained()
// 初回実行時に約170 MBをダウンロード
let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz モノラル PCM
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
Kokoroを使用すべき時
| ユースケース | 推奨TTS |
|---|---|
| iOSアプリ、軽量、バッテリー効率 | Kokoro (CoreML, 82Mパラメーター, 約170 MB) |
| 最高品質、ストリーミング、音声クローン | Qwen3-TTS (MLX, 600Mパラメーター, 約1.7 GB) |
| 多言語ストリーミング、9言語 | CosyVoice3 (MLX, 500Mパラメーター, 約1.2 GB) |
| 全二重音声対話 | PersonaPlex (MLX, 7Bパラメーター, 約5.5 GB) |
ライセンス
- モデルウェイト:Apache-2.0(hexgrad/Kokoro-82M)
- CoreML変換:Apache-2.0(aufklarer/Kokoro-82M-CoreML)
- 辞書とG2P:Apache-2.0