Väčšina oneskorenia pri živom preklade je čakanie: na stream, na ďalšie slovo, na vetu. Jedna časť, ktorú môžete ovládať, je režim latencie: menej oneskorenia, alebo menej úprav.
Poslucháč, ktorý číta živý preklad, vidí každý riadok niekoľko sekúnd po tom, ako rečník povedal. Táto medzera nie je jedno oneskorenie, ale viacero, sčítaných pozdĺž reťazca, a väčšina z nich je forma čakania. Keď viete, ktoré čakanie je ktoré, voľba režimu latencie je ľahká a vývojárovi, ktorý vytvára čítačku, to povie, čo má zobraziť a kedy.
Ako orientáciu, skôr než prídu čísla: ľudský simultánny tlmočník zvyčajne hovorí dve až štyri sekundy za rečníkom. Tlmočníci tomu hovoria ear-voice span (rozstup ucho – hlas). Pri jazykoch so slovesom na konci sa nevyrovnávajú tak, že by čakali na sloveso, ale tak, že ho predvídajú, alebo rozdelia vetu na časti, ktoré obstoja samostatne. Sekunda či dve oneskorenia nie je chyba softvéru; je to zhruba to, čo robí veľmi dobrý človek.
Každý živý prepis na VocalStacku prechádza rovnakými fázami, v rovnakom poradí, a každá čaká na tú predošlú.
Text v pôvodnom jazyku sa k čitateľovi dostane takmer hneď, ako zaznie. Preklad príde o sekundu či dve neskôr a hovorená veta prichádza až po svojom preklade, preto hlasový klip vždy príde ako posledný. Prvý viditeľný účinok reťazca však prichádza dávno pred akýmkoľvek hlasom: samotný text sa hýbe.
Prvá vec, ktorú ľudia v živom prepise zbadajú, je, že najnovšie slová sa hýbu. Fráza sa objaví, zmení a ustáli sa. To je fáza konceptu v akcii a má dôvod, ktorý platí pre každý rozpoznávač reči.
Rozpoznávač ustáli slovo tak, že sa pozrie na to, čo nasleduje. „I scream“ a „ice cream“ znejú rovnako, kým nepríde ďalšie slovo; koncové „s“ môže patriť tomuto slovu alebo nasledujúcemu. Kým nie je zvuk napravo od slova, jeho pravopis je odhad, preto sú najnovšie slová v každom živom prepise vždy najneistejšie. Koncept je jednoducho tento odhad zobrazený skôr, namiesto aby bol skrytý.
Každý koncept úplne nahradí živý koniec: slová počuté od posledného potvrdenia, ktoré sa ešte menia. Potvrdenie je konečné. Nikdy sa nemení, nesie časovanie na úrovni slov a potvrdenia sú očíslované bez medzier, takže čitateľ vie, či mu niektoré chýba.
Pre vývojára je to jediné pravidlo, ktorého sa realtime API drží: vykreslite každý potvrdený segment, potom najnovší koncept za nimi, a keď príde potvrdenie, koncept vymažte. Pripájanie konceptov namiesto ich nahrádzania vytvára duplicitný, blikajúci text; potvrdenie jednoducho spotrebuje koniec. Návod na WebSocket postaví čítačku práve na tomto.
Pre hostiteľa je pohybujúci sa text cenou za nízke oneskorenie. Zobrazovať slová skôr, než je fráza dokončená, je to, čo robí prepis živým. Preklad si však tento trik dovoliť nemôže, lebo slovo sa dá odhadnúť z polovice frázy, ale preklad nie.
Poradie slov je dôvod, prečo preklad nevie držať krok s konceptom. Nemecké sloveso môže stáť na konci svojej klauzuly a japončina dáva sloveso na koniec. Každý prekladateľ potrebuje celú klauzulu, aby ju vierne preložil. Preklad slovo po slove dá poslucháčovi úlomky, ktoré musí spätne prečítať, keď klauzula skončí. Nemčina nútila tlmočníkov čakať na sloveso dávno predtým, než sa o to pokúsil softvér.
VocalStack preto prekladá vety, nie segmenty. Vety sú predvolene zapnuté, a keď sú zapnuté, server zloží potvrdenia do vety a preloží ju celú. Kým je veta otvorená, jej preklad je predbežný; keď sa uzavrie, preklad je konečný. Čitateľ drží jednu položku na vetu a pri príchode aktualizácií ju nahrádza.
Hlas čaká ešte dlhšie. Hovorí sa len uzavretá veta, lebo veta, ktorá sa ešte mení, by sa pri každej úprave znova syntetizovala. Dlhá veta sa nahovorí po častiach, takže prvá časť môže hrať, kým sa ostatné pripravujú.
S vypnutými vetami dostane každé potvrdenie vlastný prekladový rámec. Táto cesta nečaká na nič, ale celé vety sa čítajú oveľa lepšie.
Všetky tieto čakania sa merajú od okamihu, keď zvuk dorazí do VocalStacku. Pri mnohých vysielaniach bol zvuk už vtedy oneskorený.
Keď je zdrojom stream, a nie mikrofón, zvuk je už pozadu, skôr než sa čokoľvek prepíše. Zaostáva za živou hranou, najnovším okamihom, ktorý stream zverejnil.
Obyčajný HTTP audio stream, aký publikuje väčšina internetových rádií, zvyčajne zaostáva o sekundu až tri. Server si drží burst buffer: pár sekúnd nedávneho zvuku, poslaného naraz, aby prehrávač nového poslucháča mohol začať bez zasekávania. Každý poslucháč, vrátane VocalStacku, sa pripája tak ďaleko dozadu. HLS je horšie: jeho playlisty začínajú klienta tri segmenty za živou hranou, čo v praxi znamená niekoľko sekúnd až pol minúty podľa dĺžky segmentu. Štandardné DASH zvyčajne skončí v rovnakom rozsahu ako HLS; až jeho low-latency variant ide výrazne pod to. „Živý“ stream stanice môže byť živý asi tak, ako je čerstvý list.
Tieto čísla sú približné a patria streamu, nie prepisu: žiadne nastavenie na strane VocalStacku ich nevie vrátiť späť. Ak na tých sekundách záleží, privádzajte zvuk do scény z mikrofónu alebo enkodéra, nie z verejného streamu. Oneskorenie streamu je pevné skôr, než VocalStack počuje jediné slovo; režim latencie je to, čo naozaj môžete posunúť.
Režim latencie robí jedinú vec: nastavuje rovnováhu medzi oneskorením a presnosťou. Nastavenie je pod Advanced pri vytváraní živého prepisu a na karte Speed počas jeho behu. Tam čip hovorí AUTO, SPEED alebo ACCURACY (Fast sa zobrazuje ako SPEED). Cez API zmení session.update režim počas streamu.
Kompromis je taký, ako naznačujú názvy. Fast dostane text von skôr, ale prepíše ho viac; Accuracy trvá o chvíľu dlhšie a prepisuje menej. Divák, ktorý sedí a číta preložené titulky, zriedka zbadá extra sekundu, ale všimne si slová, ktoré sa stále menia. Accuracy je preto často príjemnejšie nastavenie, pokiaľ graf oneskorenia zostáva rovný. Auto ukazuje, čo robí: riadok, ktorý zrýchlil, aby zatvoril medzeru, nesie v prepise hostiteľa odznak FAST MODE s poznámkou, že presnosť tam môže byť nižšia.
Bez ohľadu na režim musí byť prepis pripravený pred prvým slovom a jeho príprava je jediné oneskorenie, ktoré reťazec platí len raz.
Na niektorých plánoch sa živý prepis spúšťa niekoľko sekúnd. Koľko, závisí od plánu: riadok Start-up speed na stránke s cenníkom siaha od studeného štartu do 15 sekúnd na pay as you go až po vždy zahriaty stav na Enterprise.
Cez API sa čakanie prejaví ako rámce session.loading, kým sa relácia spúšťa, a potom session.ready; klient posiela zvuk až potom. Poslucháč, ktorý medzitým otvorí odkaz, vidí „Live. The first line appears in a moment.“ Keď prepis beží, toto oneskorenie je za vami a zostáva už len otázka, koľko zo zvyšného oneskorenia nesiete.
Kým živý prepis beží, karta Speed na strane hostiteľa ukazuje, čo to všetko dokopy znamená: aktuálnu medzeru medzi rečníkom a textom, vedľa nej čip režimu, a graf tejto medzery počas nahrávania s jej priemerom a maximom. V samotnom prepise riadok, ktorý dorazil k poslucháčom neskoro, nesie odznak s počtom sekúnd medzi okamihom, keď zaznel, a okamihom, keď dorazil.
Graf, ktorý zostáva nízko a rovno, znamená, že režim sedí na zvuk. Stúpajúci graf znamená, že reťazec zaostáva. Pri Accuracy môže byť práve ten moment prejsť na Auto, ktoré obetuje časť presnosti za rýchlosť, kým sa medzera nezatvorí.
Vývojári dostanú namiesto toho jedno číslo. Keď sa realtime relácia skončí, session.done nesie stats.realtimeFactor, teda prepísaný zvuk delený časom strávenom prepisovaním. Jedno upozornenie ku konvencii: v literatúre o rozpoznávaní reči real-time factor zvyčajne znamená opak, čas spracovania delený časom zvuku, kde nižšie je lepšie. VocalStack ho udáva naopak, takže tu platí, že vyššie je lepšie: živá relácia sa drží blízko 1 a hodnota pod 1 znamená, že zvuk prišiel rýchlejšie, než ho reťazec vedel prepísať.
Žiadne z týchto sekúnd nie je záhadné. Niektoré patria streamu, niektoré slovu, ktoré čaká na nasledujúce slovo, niektoré vete, ktorú preklad potrebuje, a zvyšok režimu latencie, ktorý ste zvolili. API referencia obsahuje podrobnosti rámec po rámci a demo na domovskej stránke ukazuje reťazec v chode.