Kokoro TTS — Android

Kokoro-82Mは、ONNX Runtime経由でAndroid上で動作する軽量、非自己回帰の音声合成モデルです。8言語にわたる50のプリセットボイスで自然な24 kHz音声を生成します。

サポート言語

言語コード例ボイス
英語 (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
ドイツ語dedm_martin, df_victoria (ボイスパック)

合計50のプリセットボイス。ボイス命名規則:[言語][性別]_[名前] — 例:af_heart = American Female "Heart"。

ドイツ語ボイスパック

ドイツ語は上記の多言語バンドルの音声ではありません。2 つのドイツ語音声は kikiri-tts による Kokoro-82M のファインチューニングで、それぞれドイツ語音素のみで学習した独立した 162 MB の重みセットです。ダウンロード時に KokoroPack で選び、language = "de" で合成します。各パックは独自のキャッシュを持つため、英語とドイツ語を並行してインストールできます。

パック音声ダウンロード
KokoroPack.GERMAN_MARTINdm_martin (男性)soniqo/Kokoro-82M-German-Martin-ONNX (~170 MB)
KokoroPack.GERMAN_VICTORIAdf_victoria (女性)soniqo/Kokoro-82M-German-Victoria-ONNX (~170 MB)
val modelDir = ModelManager.ensureTtsModels(
    context,
    ttsModel = TtsModel.KOKORO_SHORT_TURN,
    kokoroPack = KokoroPack.GERMAN_MARTIN, // or GERMAN_VICTORIA
)
val tts = SpeechSynthesizer(SpeechSynthesizerConfig(modelDir = modelDir))
val audio = tts.synthesize("Am 3. Oktober um 18:30 Uhr kostet es 12,80 €.", "de")

数字、序数、日付、時刻、通貨、単位、一般的な略語はデバイス上で読み上げ形に展開され、単語は 5 万語のドイツ語辞書(活用・複合語・規則によるフォールバック付き)から得られます。システム TTS エンジン(SpeechTextToSpeechService)は en-US に加えて Martin の音声を de-DE として提供します。

モデルファイル

ファイルサイズ
kokoro-e2e.onnx + .onnx.data約330 MB
voices.binボイスembedding
音素辞書言語固有の発音データ

HuggingFace: soniqo/Kokoro-82M-ONNX

パフォーマンス

指標値
パラメーター82M
推論バックエンドONNX Runtime
出力サンプリングレート24 kHz

Phonemizer

テキストは、言語固有のサポートを備えた辞書ベースのphonemizerを使用して音素トークンに変換されます。Android実装には、英語、フランス語、スペイン語、イタリア語、ポルトガル語、ヒンディー語、日本語、中国語用のphonemizerが含まれています。

パイプライン統合

Androidでは、Kokoro TTSはSpeechPipelineの一部です。STTが音声を文字起こしした後、テキストが音素化され、音声に合成されます。パイプラインは完全なVAD → STT → TTSフローを自動的に管理します。

val modelDir = ModelManager.ensureModels(context)
val pipeline = SpeechPipeline(SpeechConfig(modelDir = modelDir))
pipeline.events.collect { event ->
    when (event) {
        is SpeechEvent.TranscriptionCompleted -> println(event.text)
        else -> {}
    }
}
pipeline.start()
pipeline.pushAudio(samples) // 16kHz mono float32

ソースコード: github.com/soniqo/speech-android