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)enaf_heart, am_adam, af_sky
英語 (UK)enbf_emma, bm_george
スペイン語esef_dora
フランス語frff_siwis
ヒンディー語hihf_alpha, hm_omega
イタリア語itif_sara
日本語jajf_alpha, jm_omega
ポルトガル語ptpf_dora
中国語zhzf_xiaobei, zm_yunjian
韓国語kokf_somi

全 50 のプリセット音声。命名規約:[language_prefix][gender]_[name] — 例:af_heart はアメリカ英語の女性「Heart」、if_sara はイタリア語の女性「Sara」。

音声コードリファレンス

Kokoro のすべての音声 ID は同じパターンに従います:1 文字の言語プレフィックス、1 文字の性別コード、アンダースコア、続いて音声名。対象言語と対応するプレフィックスは下表を参照してください。

言語プレフィックス表

プレフィックス言語ロケール性別サフィックス
a英語アメリカ英語 (en-US)af_, am_
b英語イギリス英語 (en-GB)bf_, bm_
eスペイン語(es)ef_, em_
fフランス語(fr-FR)ff_
hヒンディー語(hi)hf_, hm_
iイタリア語(it)if_, im_
j日本語(ja)jf_, jm_
k韓国語(ko)kf_
pポルトガル語ブラジル (pt-BR)pf_, pm_
z中国語普通話 (zh)zf_, zm_

言語別の全音声

英語 — アメリカ (af_*, am_*)

女性: af_alloy, af_aoede, af_bella, af_heart (デフォルト), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
男性: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa

英語 — イギリス (bf_*, bm_*)

女性: bf_alice, bf_emma, bf_isabella, bf_lily
男性: bm_daniel, bm_fable, bm_george, bm_lewis

スペイン語 (ef_*, em_*)

女性: ef_dora
男性: em_alex, em_santa

フランス語 (ff_*)

女性: ff_siwis

ヒンディー語 (hf_*, hm_*)

女性: hf_alpha, hf_beta
男性: hm_omega, hm_psi

イタリア語 (if_*, im_*)

女性: if_sara
男性: im_nicola

日本語 (jf_*, jm_*)

女性: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
男性: jm_kumo

韓国語 (kf_*)

女性: kf_somi

ポルトガル語 — ブラジル (pf_*, pm_*)

女性: pf_dora
男性: pm_alex, pm_santa

中国語 — 普通話 (zf_*, zm_*)

女性: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
男性: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang

実行時に音声を一覧表示

speech kokoro --list-voices を実行すると、モデルにバンドルされている音声を一覧表示します。音声 ID はリリース間で安定しています — CLI から --voice を呼び出すとき、または Swift API の voice: に渡すときは、正確な文字列(例:if_sara)を使用してください。

アーキテクチャ

Kokoroは3段階のCoreMLパイプラインを使用します。サンプリングループなし — すべての段階は非自己回帰のフォワードパスで、段階1と2の間にSwift側の整列ステップがあります。

3段階パイプライン

ステージモデル入力出力
1. Durationduration.mlmodelc音素トークン + ボイスembedding + 速度継続時間、韻律特徴量、テキストエンコーディング
Swift整列継続時間 + ステージ1特徴量整列された韻律 & テキスト特徴量
2. Prosodyprosody.mlmodelc整列された韻律特徴量 + スタイルF0(ピッチ)+ ノイズ予測
3. Decoderdecoder_*.mlmodelc整列されたテキスト + F0 + ノイズ + スタイル24 kHz音声波形

音素バケット(Durationモデル)

Durationモデルは列挙された入力形状を使用します。入力は、それに収まる最小のバケットにパディングされます:

バケット最大音素ユースケース
p1616短いフレーズ
p3232短い文
p6464中程度の文
p128128長い文

Decoderバケット

異なる最大音声長のための固定形状デコーダーモデル(各フレーム = 24 kHzで600サンプル):

バケット最大フレーム最大音声
decoder_5s2005.0秒
decoder_10s40010.0秒
decoder_15s60015.0秒

iOS 18+ / macOS 15+が必要です。

Phonemizer

テキストは3層パイプライン経由で音素トークンに変換されます — すべてApache-2.0ライセンス、GPL依存なし:

  1. 辞書検索 — 異音字サポート付きの米国英語と英国英語の発音辞書
  2. 接尾辞語幹化 — 既知の接尾辞(例:「-ing」、「-tion」)の形態論的分解
  3. BART G2P — 語彙外単語のための別のCoreMLエンコーダー-デコーダーモデルを使用したニューラル書記素-音素フォールバック

モデルウェイト

コンポーネントサイズ形式
Durationモデル約39 MB.mlmodelc
Prosodyモデル約17 MB.mlmodelc
Decoderモデル(3バケット)各約107 MB.mlmodelc
ボイスembedding(54ボイス)約0.3 MBJSON (256次元 Float32)
G2Pエンコーダー + デコーダー約1.5 MB.mlmodelc
辞書 + 語彙約6 MBJSON
合計(1デコーダー)約170 MB

パフォーマンス

指標
パラメーター82M
推論バックエンドCoreML (Neural Engine)
推論 RTFx約0.7(リアルタイムより高速)
出力サンプリングレート24 kHz
ウェイトメモリ約170 MB(1デコーダーバケット)
非自己回帰

Qwen3-TTSやCosyVoice3がトークンをステップバイステップで生成するのとは異なり、Kokoroはサンプリングループなしの3段階パイプラインを使用します。すべてのステージは決定論的なフォワードパスです。

CLIの使用法

speech kokoro "Hello, world!" --voice af_heart --output hello.wav

オプション

オプションデフォルト説明
<text>合成するテキスト
--voiceaf_heartボイスプリセット名
--languageen言語コード:en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wav出力WAVファイルパス
--list-voices利用可能なすべてのボイスをリストして終了
--model, -mHuggingFaceモデルID

# デフォルトボイスでの英語
speech kokoro "Hello, how are you today?" --output hello.wav

# フランス語
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav

# 日本語
speech kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav

# 全50ボイスをリスト
speech 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)

Compute Unit Override

fromPretrained(computeUnits:) selects which hardware runs the main CoreML model. The default (.all) lets Core ML prefer the Neural Engine, which is the fastest path on every supported device. Pass .cpuAndGPU to bypass the ANE as a fallback on platforms where the ANE compiler produces incorrect output for this model.

import CoreML
import KokoroTTS

// Default: ANE preferred
let tts = try await KokoroTTSModel.fromPretrained()

// Fallback: bypass the Neural Engine
let tts = try await KokoroTTSModel.fromPretrained(computeUnits: .cpuAndGPU)

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)

ライセンス