Tłumaczenie automatyczne · Oryginał angielski
Kokoro TTS głosy i próbki
Kokoro-82M jest lekkim, nieautoregresywnym modelem text- to- mowy bazującym na styleTTS 2 z vokoderem ISTFTNet. Działa w całości na Neural Engine za pośrednictwem CoreML, wytwarzając naturalną mowę 24 kHz z wejścia tekstowego w jednym przejściu do przodu.
Kokoro-82M przeznaczony jest do zastosowania na urządzeniu iOS. Przy parametrach 82M (~ 80 MB z wiaderkiem 1, INT8), pasuje komfortowo na iPhone i iPad. CoreML działa na Neural Engine i pozostawia GPU wolny dla innych zadań.
Obsługiwane języki
| Język | Kod | Przykład Głosy |
|---|---|---|
| Angielski (USA) | en | af _ heart, am _ adam, af _ sky |
| Angielski (UK) | en | bf _ emma, bm _ george |
| Hiszpański | e | ef _ dora |
| Francuski | fr | ff _ siwis |
| Hindi | Cześć. | hf _ alpha, hm _ omega |
| Włoski | to | if _ sara |
| Japoński | ja | jf _ alpha, jm _ kumo |
| Portugalski | pt | pf _ dora |
| Chiński | zh | zf _ xiaobei, zm _ yunjian |
| Niemiecki | de | dm _ martin, df _ victoria (voice packs) |
54 ustawione głosy ogółem. [language_prefix][gender]_[name] - np., af_heart = American Kobieta "Heart", if_sara = Włoska kobieta "Sara".
Niemieckie głosy
Niemiecki jest obsługiwany przez dwa oddzielne jednogłosowe wiązki, kikiri- tts fine- utwory Kokoro-82M z jednym 313 MB CoreML model na głos, a nie przez głosy wielojęzycznego pakietu. Załaduj jeden przez model ID i syntetyzuj z language: "de". Liczby, daty, czasy, waluty i skróty są wypisane na urządzeniu, a słowa rozwiązują poprzez połączone 50k- słowo niemiecki słownik.
| Wzór ID | Głos |
|---|---|
| aufklarer / Kokoro-82M-German-Martin-CoreML | dm_martin (mężczyzna) |
| aufklarer / Kokoro-82M-German-Victoria-CoreML | df_victoria (samica) |
let tts = try await KokoroTTSModel.fromPretrained(modelId: KokoroTTSModel.germanMartinModelId)
let audio = try tts.synthesize(text: "Am 3. Oktober um 18:30 Uhr kostet es 12,80 €.",
voice: "dm_martin", language: "de")speech kokoro --model aufklarer/Kokoro-82M-German-Martin-CoreML --language de "Guten Tag, wie geht es Ihnen?" --output guten-tag.wavPróbki głosowe, z wyłączeniem profilowanych
Krótkie klipy MP3 generowane z lokalnym speech-swift CLI. Pełna tabela kodów głosowych pozostaje poniżej do użytku pasty copy-.
af_heartam_puckbf_alicebm_georgeef_doraem_alexff_siwishf_alphahm_omegaif_saraim_nicolajf_alphajm_kumopf_dorapm_alexzf_xiaobeizm_yunjianOdniesienie do kodów głosowych
Każdy identyfikator głosu Kokoro jest zgodny z tym samym wzorem: jednoliterowy przedrostek językowy, jeden-list Kod płci, następnie podkreślenie i nazwę głosu. Użyj poniższej tabeli, aby mapować język docelowy do prawidłowego przedrostka.
Tabela przedrostka językowa
| Prefiks | Język | Locale | GENERACJE |
|---|---|---|---|
a | Angielski | Amerykański (en- US) | af_, am_ |
b | Angielski | Brytyjski (en- GB) | bf_, bm_ |
d | Niemiecki | (de- DE) | dm_, df_ |
e | Hiszpański | e) | ef_, em_ |
f | Francuski | (FR - FR) | ff_ |
h | Hindi | (hi) | hf_, hm_ |
i | Włoski | (it) | if_, im_ |
j | Japoński | (ja) | jf_, jm_ |
p | Portugalski | Brazylijski (pt- BR) | pf_, pm_ |
z | Chiński | Mandarynka (zh) | zf_, zm_ |
Wszystkie głosy według języka
Angielski - Amerykański (af_*, am_*)
Kobieta: af_alloy, af_aoede, af_bella, af_heart (domyślnie), af_jessica, af_kore, af_nicole, af_nova, af_river, af_sarah, af_sky
Mężczyzna: am_adam, am_echo, am_eric, am_fenrir, am_liam, am_michael, am_onyx, am_puck, am_santa
Angielski - Brytyjski (bf_*, bm_*)
Kobieta: bf_alice, bf_emma, bf_isabella, bf_lily
Mężczyzna: bm_daniel, bm_fable, bm_george, bm_lewis
Hiszpański (ef_*, em_*)
Kobieta: ef_dora
Mężczyzna: em_alex, em_santa
Francuski (ff_*)
Kobieta: ff_siwis
Hindi (hf_*, hm_*)
Kobieta: hf_alpha, hf_beta
Mężczyzna: hm_omega, hm_psi
Włoski (if_*, im_*)
Kobieta: if_sara
Mężczyzna: im_nicola
Japoński (jf_*, jm_*)
Kobieta: jf_alpha, jf_gongitsune, jf_nezumi, jf_tebukuro
Mężczyzna: jm_kumo
Portugalski - Brazylijczyk (pf_*, pm_*)
Kobieta: pf_dora
Mężczyzna: pm_alex, pm_santa
Chiński - mandarynka (zf_*, zm_*)
Kobieta: zf_xiaobei, zf_xiaoni, zf_xiaoxiao, zf_xiaoyi
Mężczyzna: zm_yunjian, zm_yunxi, zm_yunxia, zm_yunyang
Biegnij speech kokoro --list-voices aby wydrukować każdy głos obecnie połączony z modelem. Identyfikatory głosowe są stabilne w różnych wersjach - użyj dokładnego ciągu (np. if_sara) podczas wołania --voice z CLI lub przejazdu voice: do Swift API.
Architektura
Kokoro wykorzystuje rurociąg 3- stage CoreML. Brak pętli próbkowania - wszystkie etapy to nieautoregresywne przejścia do przodu ze swift- bocznym stopniem wyrównania między etapami 1 i 2
3 - Etap Pipeline
| Etap | Wzór | Wejście | Wyjście |
|---|---|---|---|
| 1. Czas trwania | duration.mlmodelc | Telefonowe żetony + osadzanie głosu + prędkość | Trwałość, funkcje prosodii, kodowanie tekstu |
| — | Ustawienie Swift | Trwałość + cechy etapu 1 | Zrównane funkcje prosodii i tekstu |
| 2. Prosodia | prosody.mlmodelc | Zrównane funkcje prosodii + styl | F0 (skok) + prognozowanie hałasu |
| 3. Dekoder | decoder_*.mlmodelc | Dopasowany tekst + F0 + hałas + styl | 24 kHz forma fali akustycznej |
Bukiety telefoniczne (model czasu trwania)
Model czasu trwania wykorzystuje wyliczone kształty wejściowe. Wlot jest wyściełany do najmniejszego wiadra, które pasuje:
| Bukiet | Max Phonemes | Użyj Przypadku |
|---|---|---|
| p16 | 16 | Krótkie zwroty |
| p32 | 32 | Krótkie zdania |
| p64 | 64 | Średnie zdania |
| p128 | 128 | Długie zdania |
Bukiety dekoderów
Modele dekoderów w kształcie przypiętym do różnych maksymalnych długości dźwięku (każda klatka = 600 próbek przy 24 kHz):
| Bukiet | Max Frames | Max Audio |
|---|---|---|
decoder_5s | 200 | 5.0s |
decoder_10s | 400 | 10.0s |
decoder_15s | 600 | 15.0s |
Wymaga iOS 18+ / macOS 15+.
Fonemizer
Tekst jest przekształcany w żetony foneme za pomocą trójpoziomowego rurociągu - wszystkie Apache-2.0 licencjonowane, brak zależności GPL:
- Przeszukiwanie słownika - US English and British English wymowa słowniki z heteronim wsparcia
- Uruchamianie sufiksu - Rozkład morfologiczny znanych przyrostów (np. "-ing", "-tion")
- BART G2P - Neuralny graficzny-to-phoneme fallback za pomocą oddzielnego CoreML encoder- decoder model dla słów out- of- słownikowy
Niestandardowe przypuszczenia
Rzeczowniki właściwe poza dostarczonymi słownikami przechodzą do poziomu 3, gdzie BART zgaduje z Angielski zasady ortografii - więc nazwy nie-anglo źle się ujawniają (Tatiana staje się tˈitiəniənə). addPronunciations pacjenci word -> IPA pozycje poprzedzające poziom dokładności 1:
let tts = try await KokoroTTSModel.fromPretrained()
tts.addPronunciations(["tatiana": "tɑtiˈɑnə"])
Klucze są dopasowane do dolnej skrzyni i muszą być pojedynczymi słowami - tekst jest podzielony na Whitespace i interpunkcji przed rozdzielczością, więc klucz zawierający przestrzeń, hyphen lub apostrof nigdy nie jest sprawdzany. IPA musi używać symboli ze słownika modelu; wszystko inne jest cicho rzucane w tokenizacji. Wpisy odnoszą się tylko do angielskiej ścieżki - zh, ja, it, fr, es, ptoraz hi Wybierz dedykowane phonemizery, które nigdy nie konsultują się ze słownikami. Lookup jest odblokowany, więc rejestrować wpisy przed syntezą zaczyna działać jednocześnie na tym samym modelu.
Wagi modelu
| Składnik | Rozmiar | Format |
|---|---|---|
| Wzór czasu trwania | - 39 MB | .mlmodelc |
| Model prosodowy | ~ 17 MB | .mlmodelc |
| Modele dekoderów (3 wiadra) | ~ 107 MB każdy | .mlmodelc |
| Osadzenia głosowe (54 głosy) | - 0,3 MB | JSON (256- dim Float32) |
| Enkoder G2P + dekoder | - 1,5 MB | .mlmodelc |
| Słowniki + słowniki | ~ 6 MB | JSON |
| Ogółem (dekoder 1) | - 170 MB |
Wydajność
| Metric | Wartość |
|---|---|
| Parametry | 82M |
| Pokrycie wniosku | CoreML (Neural Engine) |
| Prośba RTFx | 0,7 (szybciej niż w czasie rzeczywistym) |
| Szybkość próbkowania wyjściowego | 24 kHz |
| Pamięć wagowa | ~ 170 MB (1 pojemnik na dekoder) |
W przeciwieństwie do Qwen3-TTS i CosyVoice3, które wytwarzają żetony krok-by- krok, Kokoro używa gazociągu na etapie 3- bez pętli próbkowania. Wszystkie etapy są determinujące przejścia do przodu.
Zastosowanie CLI
speech kokoro "Hello, world!" --voice af_heart --output hello.wav
Opcje
| Opcja | Domyślne | Opis |
|---|---|---|
<text> | Tekst do syntetyzowania | |
--voice | af_heart | Podana nazwa głosowa |
--language | en | Kod języka: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Wyjście ścieżki pliku WAV |
--list-voices | Lista wszystkich dostępnych głosów i wyjść | |
--model, -m | HuggingFace model ID |
Przykłady
# English with default voice
speech kokoro "Hello, how are you today?" --output hello.wav
# French
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr --output bonjour.wav
# Japanese
speech kokoro "こんにちは世界" --voice jf_alpha --language ja --output konnichiwa.wav
# List all 54 voices
speech kokoro --list-voices
Swift API
import KokoroTTS
import AudioCommon
let tts = try await KokoroTTSModel.fromPretrained()
// Downloads ~170 MB on first run
let audio = try tts.synthesize(text: "Hello world", voice: "af_heart")
// audio: [Float] — 24 kHz mono PCM
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
Oblicz przekroczenie jednostki
fromPretrained(computeUnits:) wybiera, który sprzęt uruchamia główny model CoreML. Domyślnie (.all) pozwala Core ML preferować Neural Engine, który jest najszybszą ścieżką na każdym obsługiwanym urządzeniu. .cpuAndGPU obejście ANE jako awaryjnego działania na platformach, na których kompilator ANE wytwarza nieprawidłową wydajność dla tego modelu.
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)
Kiedy stosować Kokoro
| Użyj Przypadku | Zalecane TTS |
|---|---|
| Aplikacja iOS, lekka, battery- wydajna | Kokoro (CoreML, 82M params, ~ 170 MB) |
| Najwyższa jakość, streaming, klonowanie głosu | Qwen3-TTS (MLX, 600M params, ~ 1.7 GB) |
| Wielojęzyczne streaming, 9 języków | CosyVoice3 (MLX, 500M params, ~ 1.2 GB) |
| Uzupełniający dialog słowny | PersonaPlex (MLX, 7B params, ~ 5.5 GB) |
Licencja
- Wagi modelu: Apache-2.0 (hexgrad / Kokoro-82M)
- Konwersja CoreML: Apache-2.0 (aufklarer / Kokoro-82M-CoreML)
- Słowniki i G2P: Apache-2.0
Qwen3-ASR przemówienie do tekstu · Parakeet TDT przemówienie do tekstu · Klonowanie głosu CosyVoice3