Folx
Raport techniczny przygotowany przez Folx — konsulting, wytwarzanie oprogramowania i inzynieria AI/ML. Wspolpracujemy z klientami, aby tworzyc, rozwijac i dostarczac zaawansowane rozwiazania IT — od systemow opartych na sztucznej inteligencji po kompleksowa integracje technologiczna. folx.it

OmniVoice — synteza mowy po polsku w czasie rzeczywistym

2026-04-09 RTX 5090 (32 GB) k2-fsa/OmniVoice float16 Glos: weronika (klonowany) Jezyk: polski English version
Dlaczego polski? — Wszystkie testy przeprowadzono w jezyku polskim, ktory jest jednym z najtrudniejszych jezykow dla systemow syntezy mowy. Polski charakteryzuje sie zlozanymi grupami spolgloskowym (szcz, prz, trz, dz, dz, dz), samogloskami nosowymi (a, e), palatalizacja zalezna od kontekstu, wyjatkami od akcentowania oraz rozbudowana fleksja zmieniajaca koncowki wyrazow w zaleznosci od przypadku, rodzaju i liczby. Te wyzwania fonologiczne czynia polski doskonalym testem obciazeniowym dla kazdego modelu TTS — jesli radzi sobie dobrze z polskim, wiekszosz innych jezykow europejskich bedzie latwiejsza.

Modele

OmniVoice

autor: k2-fsa · Apache-2.0 · arXiv:2604.00688

Najnowocesniejszy wielojezyczny model TTS zero-shot obslugujacy ponad 600 jezykow — najszersza obsluga jezykowa wsrod modeli TTS zero-shot. Wykorzystuje architekture dyfuzyjnego modelu jezykowego z 8-warstwowym hierarchicznym koderem audio.

  • Architektura: backbone Qwen3-0.6B (~600M parametrow), iteracyjne dekodowanie dyfuzyjne z maskowaniem
  • Klonowanie glosu: zero-shot na podstawie nagrania referencyjnego + transkrypcji
  • Projektowanie glosu: kontrola plci, wieku, wysokosci, akcentu, dialektu, szeptu przez instrukcje tekstowe
  • Paralingwistyka: [laughter], [breath] oraz korekcja wymowy
  • Szybkosc: RTF nawet 0.025 (40x szybciej niz w czasie rzeczywistym)
  • Dostepny na: HuggingFace, CLI (omnivoice-infer), demo Gradio

Chatterbox

autor: Resemble AI · Licencja MIT

Rodzina trzech modeli TTS open-source (Chatterbox, Chatterbox-Multilingual, Chatterbox-Turbo) zaprojektowanych do generowania naturalnej mowy z klonowaniem glosu. Wbudowany znak wodny Perth do wykrywania audio generowanego przez AI.

  • Architektura: autoregresywny tokenizer mowy + dekoder mel-spektralny, 350M–500M parametrow
  • Klonowanie glosu: zero-shot na podstawie nagrania referencyjnego
  • Wariant Turbo: 350M parametrow, destylowany do 1-krokowego dekodowania dla agentow glosowych
  • Paralingwistyka: natywne tagi [laugh], [cough], [chuckle]
  • Jezyki: 23+ (angielski, hiszpanski, francuski, niemiecki, polski, chinsk, japonski, arabski, hindi itd.)
  • Znak wodny: Perth — przetrwa kompresje MP3, ~100% skutecznosci wykrywania
  • Dostepny na: pip install chatterbox-tts, HuggingFace

Przeglad architektury

ChatterboxOmniVoice
Typ modeluAutoregresywny (token po tokenie)Dyfuzja z maskowaniem (iteracyjne odmaskowanie)
BackboneWlasny dekoder T3Qwen3-0.6B LLM (~600M parametrow)
Kodek audioPojedynczy strumien kodowy8-warstwowy hierarchiczny (8×1025 tokenow)
StreamingPrawdziwy streaming token-po-tokenieBrak natywnego streamingu — pelna sekwencja na wywolanie
Klonowanie glosuWarunkowanie embeddingamiTokenizacja audio referencyjnego + prefiks
JezykiPolski + podstawowy wielojezyczny600+ jezykow natywnie

Kluczowa roznica architektoniczna

Chatterbox dziala w czasie rzeczywistym, poniewaz streamuje token po tokenie — dekoder autoregresywny emituje tokeny sekwencyjnie, kazdy moze byc natychmiast dekodowany do audio i wyslany. TTFA = czas do wygenerowania pierwszych kilku tokenow.

OmniVoice wykorzystuje dyfuzje z maskowaniem — wszystkie tokeny audio zaczynaja jako [MASK] i sa iteracyjnie odmaskowane w N krokach. Kazdy krok uruchamia pelne przejscie przez caly model. Tokeny sa ujawniane wg wyniku pewnosci, nie pozycji. Czesciowe audio nie moze byc dekodowane w trakcie generowania.

Jednak surowa szybkosc inferencji OmniVoice jest na tyle duza (RTF 0.01–0.04), ze chunking na poziomie tekstu osiaga porownywalne lub lepsze TTFA niz streaming tokenowy Chatterboxa.


Test 1: Bazowa latencja

Pelne generowanie, klonowany glos, bez chunkingu. Calkowity czas od wywolania generate() do zwrocenia tensora.

TekstZnakiAudio32 kroki16 krokow8 krokow
mini121.2–1.5s269ms (RTF 0.222)136ms (RTF 0.094)72ms (RTF 0.054)
krotki664.3s298ms (RTF 0.069)151ms (RTF 0.035)80ms (RTF 0.019)
sredni19612.6s503ms (RTF 0.040)255ms (RTF 0.020)137ms (RTF 0.011)
dlugi48828.5–28.9s849ms (RTF 0.030)446ms (RTF 0.015)255ms (RTF 0.009)
Bazowy — Mini
32 kroki
16 krokow
8 krokow
Bazowy — Krotki
32 kroki
16 krokow
8 krokow
Bazowy — Sredni
32 kroki
16 krokow
8 krokow
Bazowy — Dlugi
32 kroki
16 krokow
8 krokow

Test 2: Streaming chunkowany (pomiar TTFA)

Symulacja streamingu: podzial tekstu na granicach zdan, niezalezne generowanie kazdego chunka, pomiar czasu do pierwszego gotowego chunka.

Tekst sredni (196 znakow, 2 chunki)

KrokiTTFA (chunk 0)Audio chunk 0Gen chunk 1Audio chunk 1Lacznie
32335ms7.00s327ms5.80s662ms
16169ms7.00s165ms5.80s333ms
888ms7.00s86ms5.80s173ms
Chunkowany — Sredni
32 kroki (2 chunki)
16 krokow (2 chunki)
8 krokow (2 chunki)

Tekst dlugi (488 znakow, 5 chunkow)

KrokiTTFA (chunk 0)ChunkiGen lacznieAudio lacznieRTF
32331ms51605ms29.6s0.054
16168ms5813ms29.6s0.027
887ms5423ms29.6s0.014

Rozklad po chunkach (tekst dlugi, 16 krokow):

ChunkCzas gen.AudioTresc
0168ms7.00s"Powazny blad w obiegu dokumentow..."
1165ms5.80s"Przez pomylke dokumentacja..."
2150ms4.08s"Incydent zostal zgloszony..."
3171ms7.44s"Linia lotnicza przeprosila..."
4159ms5.32s"Zwiazki zawodowe domagaja sie..."
Chunkowany — Dlugi
32 kroki (5 chunkow)
16 krokow (5 chunkow)
8 krokow (5 chunkow)

Test 3: Cache promptu klonowania glosu

create_voice_clone_prompt() wstepnie koduje audio referencyjne do wielokrotnego uzycia.

TrybCzas generowania
Surowa sciezka ref_audio (kodowanie przy kazdym wywolaniu)264ms
Wstepnie zcachowany VoiceClonePrompt255ms
Koszt utworzenia promptu37ms (jednorazowo)
Oszczednosc na wywolanie9ms (3%)

Kodowanie promptu jest juz szybkie (37ms). Cache jest nadal warty implementacji na serwerze, aby uniknac redundantnego kodowania.


Test 4: Wspolbiezna inferencja

Ten sam tekst, 3 zapytania

TrybCzas calkowityNa zapytaniePrzyspieszenie
Sekwencyjnie767ms255ms kazde1.0x
3x rownolegle (pula watkow + strumienie CUDA)462ms436–460ms kazde1.66x

Rozne dlugosci tekstu, 3 rownolegle

ZapytanieTekstLatencjaAudio
0mini (12 znakow)408ms1.51s
1sredni (196 znakow)502ms12.58s
2dlugi (488 znakow)555ms28.61s
Czas calkowity558ms

Test 5: Rozklad pipeline'u

Izolacja narzutow (srednia z 10 uruchomien, tekst sredni, 16 krokow):

EtapCzas% calkowitego
Generowanie tokenow (16 krokow)~245ms92%
Dekodowanie audio (HiggsAudioV2)10ms4%
Postprocessing (usuwanie ciszy, fade, normalizacja)10ms4%

Generowanie tokenow dominuje. Dekodowanie i postprocessing sa pomijalne. Optymalizacja powinna skupic sie na forward pass.


Test 6: Streaming zoptymalizowany pod pierwszy chunk

Najlepsza strategia: podzial na pierwszym zdaniu, generowanie krotkiego pierwszego chunka dla minimalnego TTFA, reszta generuje sie podczas odtwarzania pierwszego chunka.

KrokiTTFAPierwszy chunk graCzas gen. resztyPrzerwa?
32335ms7.00s700msNie — reszta gotowa 6.3s wczesniej
16169ms7.00s357msNie — reszta gotowa 6.6s wczesniej
887ms7.00s185msNie — reszta gotowa 6.8s wczesniej
Zoptymalizowany streaming — Tekst dlugi
32 kroki
16 krokow
8 krokow

Nawet dla najdluzszego tekstu (488 znakow, 29s audio) nie ma zadnej przerwy w odtwarzaniu przy zadnej liczbie krokow. Pierwszy chunk generuje 7s audio, zapewniajac ogromne okno buforowania. Margines wynosi 6–7 sekund — wystarczajaco na jitter sieciowy, kodowanie i buforowanie po stronie klienta.


Test 7: Profil pamieci GPU

ScenariuszSzczytowy VRAM
Model zaladowany (idle)5.41 GB
1 inferencja5.61 GB
3 rownolegle inferencje5.87 GB
Zapas na 32 GB26.1 GB wolne
Szacowane max rownolegych~5

Przyrostowy koszt na rownola inferencje to ~150 MB. Duzy zapas na dodatkowe instancje modelu lub rownolegle zapytania.


OmniVoice vs Chatterbox

MetrykaChatterboxOmniVoice (16 krokow)Zwyciezca
TTFA~250ms169msOmniVoice
RTF (tekst sredni)0.05–0.100.020OmniVoice
Typ streaminguPrawdziwy token-po-tokenieNa poziomie chunkowChatterbox
Przerwy w odtwarzaniuBrakBrak (bufor 7s)Remis
Jakosc glosuDobraDoskonalaOmniVoice
Klonowanie glosuWarunkowanie embeddingamiAudio ref. + tekstOmniVoice
JezykiPolski + ograniczone600+OmniVoice
Zuzycie VRAM4–6 GB5.6 GBRemis
Rownolegych uzytkownikow3–4 z pula slotow3–5 na jednym GPURemis

Chatterbox vs OmniVoice — odsuch (glos weronika)

Ten sam tekst, ten sam glos (weronika), ten sam GPU. Chatterbox wygenerowany przez serwer produkcyjny. OmniVoice przy 16 krokach (rekomendowane) i 32 krokach (najlepsza jakosc).

Mini — „Dzien dobry.”

Chatterbox

OmniVoice 16 krokow

Krotki — zdanie informacyjne (66 znakow)

Chatterbox

OmniVoice 16 krokow

Sredni — incydent PLL LOT (196 znakow)

Chatterbox

OmniVoice 16 krokow

Chatterbox (ten sam)

OmniVoice 32 kroki

Dlugi — pelna wiadomosc (488 znakow)

Chatterbox

OmniVoice 16 krokow

Chatterbox (ten sam)

OmniVoice 32 kroki


Porownania wewnetrzne OmniVoice

Kompromisy miedzy liczba krokow a chunkingiem.

32 vs 16 krokow (tekst sredni)

32 kroki (referencyjna jakosc)

16 krokow (rekomendowane)

Bazowy vs Chunkowany (tekst sredni, 16 krokow)

Bazowy (pojedyncze generowanie)

Chunkowany (2 chunki, symulacja streamingu)

Dolna granica jakosci — 8 krokow (tekst sredni)

32 kroki (najlepsza jakosc)

8 krokow (najszybsze, 87ms TTFA)

Zoptymalizowany streaming vs Bazowy (tekst dlugi)

Bazowy 16 krokow (single shot)

Zoptymalizowany 16 krokow (chunked stream)


Paralingwistyka: tagi dzwiekow niewerbalnych

OmniVoice obsluguje ekspresyjne tagi niewerbalne osadzone bezposrednio w tekscie. Wszystkie probki: polski, glos klonowany (weronika), 16 krokow.

Obslugiwane tagi: [laughter], [sigh], [confirmation-en], [question-ah], [question-oh], [question-ei], [question-yi], [surprise-ah], [surprise-oh], [surprise-wa], [surprise-yo], [dissatisfaction-hnn]

TagTekstGen.Audio
[laughter]"...to sie stalo [laughter] naprawde nie moge."156ms3.91s
[sigh]"No coz [sigh] trzeba bylo to przewidziec."150ms2.41s
[confirmation-en]"[confirmation-en] tak, dokladnie o to mi chodzilo."152ms2.77s
[question-ah]"Naprawde tak uwazasz [question-ah] bo ja mam watpliwosci."153ms3.68s
[question-oh]"[question-oh] a to ciekawe, kiedy to sie stalo?"151ms2.74s
[question-ei]"Mowisz powaznie [question-ei] nie zartujesz?"147ms2.71s
[surprise-ah]"[surprise-ah] nie spodziewalam sie tego!"146ms2.61s
[surprise-oh]"[surprise-oh] to niesamowite co sie wydarzylo."151ms2.76s
[surprise-wa]"[surprise-wa] ale rewelacja, nie do wiary!"150ms2.30s
[surprise-yo]"Wygralismy konkurs [surprise-yo] fantastycznie!"148ms3.08s
[dissatisfaction-hnn]"[dissatisfaction-hnn] no nie wiem, to mnie nie przekonuje."155ms3.38s
Mix (4 tagi)"...co sie stalo [question-ah] ...wygrali [surprise-oh] ...stracili [sigh] ...[dissatisfaction-hnn] trzeba bylo..."247ms10.44s
Bez tagow (kontrolna)"Nie moge uwierzyc, ze to sie stalo, naprawde nie moge."153ms3.40s
Emocje i reakcje
"...to sie stalo [laughter] naprawde nie moge."
"No coz [sigh] trzeba bylo to przewidziec."
"[confirmation-en] tak, dokladnie o to mi chodzilo."
"[dissatisfaction-hnn] no nie wiem, to mnie nie przekonuje."
Pytania
"Naprawde tak uwazasz [question-ah] bo ja mam watpliwosci."
"[question-oh] a to ciekawe, kiedy to sie stalo?"
"Mowisz powaznie [question-ei] nie zartujesz?"
Zaskoczenie
"[surprise-ah] nie spodziewalam sie tego!"
"[surprise-oh] to niesamowite co sie wydarzylo."
"[surprise-wa] ale rewelacja, nie do wiary!"
"Wygralismy konkurs [surprise-yo] fantastycznie!"
Mix emocji (4 tagi w jednym zdaniu)
"Slyszales co sie stalo [question-ah] okazuje sie ze wygrali [surprise-oh] a potem wszystko stracili [sigh] no i co tu duzo mowic [dissatisfaction-hnn] trzeba bylo lepiej planowac."
Kontrolna (bez tagow)
"Nie moge uwierzyc, ze to sie stalo, naprawde nie moge."

Wszystkie tagi generuja wyrazne dzwieki niewerbalne w oznaczonych miejscach. Probka mieszana (4 tagi, 10.44s) demonstruje naturalny przeplyw miedzy mowa a emocjami. Czas generowania pozostaje stalny (~150ms) niezaleznie od liczby tagow; probka mieszana jest dluzsza (247ms) tylko dlatego, ze sam tekst jest dluzszy.


Wnioski

OmniVoice jest gotowy do uzycia w streamingu TTS w czasie rzeczywistym i przewyzsza Chatterbox pod wzgledem surowych metryk szybkosci. Architektura dyfuzji z maskowaniem uniemozliwia prawdziwy streaming na poziomie tokenow, ale chunking na poziomie zdan osiaga TTFA 169ms przy 16 krokach z zerowymi przerwami w odtwarzaniu. W polaczeniu z doskonala jakoscia glosu, obsluga 600+ jezykow i niskim zuzciem VRAM, OmniVoice jest mocnym kandydatem do produkcyjnego wdrozenia TTS.

W sprawie konsultacji dotyczacych integracji TTS w czasie rzeczywistym, architektury streamingu lub inzynierii AI/ML, skontaktuj sie z Folx.