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를 다른 작업에 쓸 수 있도록 해방시킵니다.

지원 언어

언어코드예시 음색
영어 (미국)enaf_heart, am_adam, af_sky
영어 (영국)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개의 프리셋 음색. 음색 명명 규칙: [언어][성별]_[이름] — 예: af_heart = American Female "Heart".

아키텍처

Kokoro는 3단계 CoreML 파이프라인을 사용합니다. 샘플링 루프가 없고, 모든 단계는 비자동 회귀 포워드 패스이며, 1단계와 2단계 사이에 Swift 측 얼라인먼트 단계가 있습니다.

3단계 파이프라인

단계모델입력출력
1. Durationduration.mlmodelc음소 토큰 + 음색 임베딩 + 속도지속 시간, 운율 특징, 텍스트 인코딩
Swift 얼라인먼트지속 시간 + 1단계 특징정렬된 운율 및 텍스트 특징
2. Prosodyprosody.mlmodelc정렬된 운율 특징 + 스타일F0 (피치) + 노이즈 예측
3. Decoderdecoder_*.mlmodelc정렬된 텍스트 + F0 + 노이즈 + 스타일24 kHz 오디오 파형

음소 버킷 (Duration 모델)

Duration 모델은 열거된 입력 형태를 사용합니다. 입력은 맞는 가장 작은 버킷으로 패딩됩니다:

버킷최대 음소사용 사례
p1616짧은 구
p3232짧은 문장
p6464중간 문장
p128128긴 문장

디코더 버킷

서로 다른 최대 오디오 길이를 위한 고정 형태 디코더 모델(각 프레임 = 24 kHz에서 600 샘플):

버킷최대 프레임최대 오디오
decoder_5s2005.0초
decoder_10s40010.0초
decoder_15s60015.0초

iOS 18+ / macOS 15+가 필요합니다.

음소화

텍스트는 3계층 파이프라인을 통해 음소 토큰으로 변환됩니다 — 모두 Apache-2.0 라이선스이며, GPL 종속성이 없습니다:

  1. 사전 조회 — 동음이의어를 지원하는 미국/영국 영어 발음 사전
  2. 접미사 어간화 — 알려진 접미사(예: "-ing", "-tion")에 대한 형태학적 분해
  3. BART G2P — OOV 단어를 위한 별도의 CoreML 인코더-디코더 모델을 사용하는 신경 grapheme-to-phoneme 폴백

모델 웨이트

구성 요소크기포맷
Duration 모델약 39 MB.mlmodelc
Prosody 모델약 17 MB.mlmodelc
디코더 모델 (3개 버킷)각 약 107 MB.mlmodelc
음색 임베딩 (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 사용법

audio 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

예제

# 기본 음색으로 영어
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)

라이선스