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.

iOS- Ready

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ęzykKodPrzykład Głosy
Angielski (USA)enaf _ heart, am _ adam, af _ sky
Angielski (UK)enbf _ emma, bm _ george
Hiszpańskieef _ dora
Francuskifrff _ siwis
HindiCześć.hf _ alpha, hm _ omega
Włoskitoif _ sara
Japońskijajf _ alpha, jm _ kumo
Portugalskiptpf _ dora
Chińskizhzf _ xiaobei, zm _ yunjian
Niemieckidedm _ 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 IDGłos
aufklarer / Kokoro-82M-German-Martin-CoreMLdm_martin (mężczyzna)
aufklarer / Kokoro-82M-German-Victoria-CoreMLdf_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.wav

Pró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_heartAmerykańska kobieta
am_puckAmerykański mężczyzna
bf_aliceBrytyjska kobieta
bm_georgeBrytyjski mężczyzna
ef_doraHiszpanka
em_alexHiszpański samiec
ff_siwisFrancuska samica
hf_alphaHindi kobieta
hm_omegaHindi samiec
if_saraWłoska samica
im_nicolaWłoski mężczyzna
jf_alphaJaponka
jm_kumoJaponka
pf_doraPortugalka
pm_alexPortugalski samiec
zf_xiaobeiMandarynka żeńska
zm_yunjianMandarynka

Odniesienie 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

PrefiksJęzykLocaleGENERACJE
aAngielskiAmerykański (en- US)af_, am_
bAngielskiBrytyjski (en- GB)bf_, bm_
dNiemiecki(de- DE)dm_, df_
eHiszpańskie)ef_, em_
fFrancuski(FR - FR)ff_
hHindi(hi)hf_, hm_
iWłoski(it)if_, im_
jJapoński(ja)jf_, jm_
pPortugalskiBrazylijski (pt- BR)pf_, pm_
zChińskiMandarynka (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

Lista głosów w runtime

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

EtapWzórWejścieWyjście
1. Czas trwaniaduration.mlmodelcTelefonowe żetony + osadzanie głosu + prędkośćTrwałość, funkcje prosodii, kodowanie tekstu
—Ustawienie SwiftTrwałość + cechy etapu 1Zrównane funkcje prosodii i tekstu
2. Prosodiaprosody.mlmodelcZrównane funkcje prosodii + stylF0 (skok) + prognozowanie hałasu
3. Dekoderdecoder_*.mlmodelcDopasowany tekst + F0 + hałas + styl24 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:

BukietMax PhonemesUżyj Przypadku
p1616Krótkie zwroty
p3232Krótkie zdania
p6464Średnie zdania
p128128Dł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):

BukietMax FramesMax Audio
decoder_5s2005.0s
decoder_10s40010.0s
decoder_15s60015.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:

  1. Przeszukiwanie słownika - US English and British English wymowa słowniki z heteronim wsparcia
  2. Uruchamianie sufiksu - Rozkład morfologiczny znanych przyrostów (np. "-ing", "-tion")
  3. 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ładnikRozmiarFormat
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 MBJSON (256- dim Float32)
Enkoder G2P + dekoder- 1,5 MB.mlmodelc
Słowniki + słowniki~ 6 MBJSON
Ogółem (dekoder 1)- 170 MB

Wydajność

MetricWartość
Parametry82M
Pokrycie wnioskuCoreML (Neural Engine)
Prośba RTFx0,7 (szybciej niż w czasie rzeczywistym)
Szybkość próbkowania wyjściowego24 kHz
Pamięć wagowa~ 170 MB (1 pojemnik na dekoder)
Nieautoregresywne

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

OpcjaDomyślneOpis
<text>Tekst do syntetyzowania
--voiceaf_heartPodana nazwa głosowa
--languageenKod języka: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavWyjście ścieżki pliku WAV
--list-voicesLista wszystkich dostępnych głosów i wyjść
--model, -mHuggingFace 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 PrzypadkuZalecane TTS
Aplikacja iOS, lekka, battery- wydajnaKokoro (CoreML, 82M params, ~ 170 MB)
Najwyższa jakość, streaming, klonowanie głosuQwen3-TTS (MLX, 600M params, ~ 1.7 GB)
Wielojęzyczne streaming, 9 językówCosyVoice3 (MLX, 500M params, ~ 1.2 GB)
Uzupełniający dialog słownyPersonaPlex (MLX, 7B params, ~ 5.5 GB)

Licencja