Većina kašnjenja u prijevodu uživo je čekanje: na tok, na sljedeću riječ, na rečenicu. Jedan dio na koji imate uticaja jeste režim kašnjenja: manje kašnjenja ili manje revizija.
Slušalac koji čita prijevod uživo vidi svaki red nekoliko sekundi nakon što ga je govornik izgovorio. Taj razmak nije jedno kašnjenje nego nekoliko, nadovezanih duž jednog lanca, i većina njih je oblik čekanja. Kad znate koje čekanje je koje, izbor režima kašnjenja postaje jednostavan, a programeru koji gradi čitač kazuje šta da prikaže i kada.
Korisno mjerilo prije brojki: ljudski simultani tumač obično govori dvije do četiri sekunde iza govornika. Tumači to zovu ear-voice span (raspon između uha i glasa), a s jezicima u kojima glagol ide na kraj ne bore se čekanjem glagola, nego ga predviđaju ili rečenicu dijele na dijelove koji mogu stajati sami. Sekunda ili dvije kašnjenja nije mana softvera; otprilike je to ono što čini vrlo dobar čovjek.
Svaka transkripcija uživo na VocalStacku prolazi kroz iste faze, istim redom, i svaka čeka onu prije sebe.
Tekst na izvornom jeziku stiže čitaocu gotovo onako kako se izgovara. Prijevod slijedi sekundu ili dvije kasnije, a izgovorena rečenica dolazi nakon svog prijevoda, zato glasovni isječak uvijek stigne posljednji. Prvi vidljivi efekat lanca, ipak, dolazi davno prije bilo kakvog glasa: sam tekst se pomjera.
Prva stvar koju ljudi primijete u transkriptu uživo jeste da se najnovije riječi pomjeraju. Fraza se pojavi, promijeni i slegne. To je posao faze nacrta, i postoji iz razloga koji važi za svaki sistem za prepoznavanje govora.
Prepoznavač utvrđuje riječ gledajući šta slijedi iza nje. „I scream“ i „ice cream“ zvuče isto dok ne stigne sljedeća riječ, a završno „s“ može pripadati ovoj riječi ili sljedećoj. Dok nema zvuka desno od riječi, njen zapis je pretpostavka, pa su najnovije riječi u svakom transkriptu uživo uvijek najnesigurnije. Nacrt je jednostavno ta pretpostavka prikazana ranije umjesto da bude skrivena.
Svaki nacrt u potpunosti zamjenjuje živi kraj: riječi čute od posljednje potvrde, a one se još mijenjaju. Potvrda je konačna. Nikad se ne mijenja, nosi vremena na nivou riječi, a potvrde su numerisane bez praznina, pa čitač može vidjeti ako je neka propuštena.
Za programera ovo je jedino pravilo koje realtime API traži: prikaži svaki potvrđeni segment, zatim najnoviji nacrt iza njih, i obriši nacrt kad stigne potvrda. Dodavanje nacrta umjesto zamjene proizvodi dupliran, treperav tekst; potvrda jednostavno potroši kraj. WebSocket vodič gradi čitač upravo oko toga.
Za domaćina, pomjeranje teksta cijena je niskog kašnjenja. Prikazivanje riječi prije nego što je fraza završena čini transkript živim. Prijevod, ipak, ne može priuštiti taj trik, jer se riječ može pogoditi iz pola fraze, ali prijevod ne može.
Redoslijed riječi je razlog zašto prijevod ne može držati korak s nacrtom. Njemački glagol može stajati na kraju svoje klauze, a japanski stavlja glagol na kraj. Svaki prevodilac treba cijelu klauzu prije nego što je vjerno prenese. Prevođenje riječ po riječ daje slušaocu fragmente koje mora poništiti kad se klauza zatvori. Njemački je tumačima odavno prije softvera nametnuo čekanje glagola.
VocalStack zato prevodi rečenice, a ne segmente. Rečenice su podrazumijevano uključene, i kad su uključene, server sastavlja potvrde u rečenicu i prevodi je cijelu. Dok je rečenica otvorena, njen prijevod je privremen; kad se zatvori, prijevod je konačan. Čitač drži jedan unos po rečenici i zamjenjuje ga kako stižu ažuriranja.
Govor čeka još duže. Izgovara se samo zatvorena rečenica, jer bi se rečenica koja se još mijenja ponovo sintetizovala pri svakoj reviziji. Duga rečenica izgovara se u dijelovima, pa prvi može da se pusti dok se ostali pripremaju.
Kad su rečenice isključene, svaka potvrda dobija svoj okvir prijevoda. Taj put ne čeka ništa, ali cijele rečenice se čitaju mnogo bolje.
Sva ta čekanja mjere se od trenutka kad zvuk stigne do VocalStacka. Za mnoge emisije zvuk je već kasnio kad je stigao.
Kad je izvor tok, a ne mikrofon, zvuk već kasni prije nego što se išta transkribuje. Zaostaje za živom ivicom, najnovijim trenutkom koji je tok objavio.
Običan HTTP audio tok, kakav objavljuje većina internet radio stanica, obično kasni sekundu do tri za živim. Server održava bafer za naglo punjenje: nekoliko sekundi nedavnog zvuka, poslanih odjednom, da se plejer novog slušaoca može pokrenuti bez zastoja. Svaki slušalac, uključujući VocalStack, ulazi toliko unazad. HLS je gori: njegove plejliste pokreću klijenta tri segmenta iza žive ivice, što u praksi znači nekoliko sekundi do pola minute, zavisno od dužine segmenta. Standardni DASH obično je u istom opsegu kao HLS; samo njegova varijanta niskog kašnjenja ide znatno ispod. Stanica koja se predstavlja kao „uživo“ može biti uživo na isti način na koji je pismo aktuelno.
Ove brojke su okvirne i pripadaju toku, a ne transkripciji: nijedna postavka na VocalStackovoj strani ih ne može vratiti. Ako su te sekunde važne za događaj, zvuk u fazu uvedite s mikrofona ili enkodera, a ne s javnog toka. Kašnjenje toka je fiksno prije nego što VocalStack čuje ijednu riječ; režim kašnjenja je ono što stvarno možete pomjeriti.
Režim kašnjenja radi jednu stvar: postavlja ravnotežu između kašnjenja i tačnosti. Postavka se nalazi pod Advanced kad se kreira transkripcija uživo, a na kartici Speed dok ona radi. Tamo čip glasi AUTO, SPEED ili ACCURACY (Fast se prikazuje kao SPEED). Preko API-ja, session.update ga mijenja usred toka.
Kompromis je onakav kakav imena sugerišu. Fast izbacuje tekst ranije, ali revidira više njega; Accuracy malo duže čeka i revidira manje. Publika koja sjedi i čita prevedene titlove rijetko primijeti dodatnu sekundu, ali primijeti riječi koje se stalno mijenjaju. Zato je Accuracy često ljubaznija postavka, sve dok grafikon kašnjenja ostaje raven. Auto pokazuje svoje karte: red koji je ubrzao da zatvori razmak nosi bedž FAST MODE u transkriptu domaćina, uz napomenu da tačnost tu može biti niža.
Bez obzira na režim, transkripcija mora biti spremna prije prve riječi, a to pripremanje je jedino kašnjenje koje lanac plaća samo jednom.
Na nekim paketima transkripcija uživo treba nekoliko sekundi da počne. Koliko, zavisi od paketa: red Start-up speed na stranici s cijenama kreće se od hladnog starta do 15 sekundi na paketu Pay as you go, pa do uvijek spremne transkripcije na paketu Enterprise.
Preko API-ja, čekanje se vidi kao okviri session.loading dok se sesija pokreće, zatim session.ready; klijent šalje zvuk tek nakon toga. Slušalac koji u međuvremenu otvori link vidi „Live. The first line appears in a moment.“ Kad transkripcija radi, ovo kašnjenje je iza vas, a jedino pitanje koje ostaje jeste koliko preostalog kašnjenja nosite.
Dok transkripcija uživo radi, kartica Speed na strani domaćina pokazuje na šta se sve ovo svodi: trenutni razmak između govornika i teksta, s čipom režima pored njega, i grafikon tog razmaka kroz cijeli snimak, s prosjekom i vrhom. U samom transkriptu, red koji je stigao slušaocima kasno nosi bedž s brojem sekundi između trenutka kad je izgovoren i trenutka kad je stigao.
Grafikon koji ostaje nizak i raven znači da režim odgovara zvuku. Grafikon koji raste znači da lanac zaostaje. Na Accuracy, to može biti trenutak za prelazak na Auto, koji dio tačnosti mijenja za brzinu dok se razmak ne zatvori.
Programeri umjesto toga dobijaju jedan broj. Kad se realtime sesija završi, session.done nosi stats.realtimeFactor, odnosno transkribovani zvuk podijeljen s vremenom utrošenim na njegovu transkripciju. Jedno upozorenje o konvenciji: u literaturi o prepoznavanju govora real-time factor obično znači obrnuto, vrijeme obrade u odnosu na trajanje zvuka, gdje je niže bolje. VocalStack ga prikazuje obrnuto, pa je ovdje više bolje: živa sesija je blizu 1, a ispod 1 znači da je zvuk stigao brže nego što ga je lanac mogao transkribovati.
Nijedna od ovih sekundi nije misteriozna. Neke pripadaju toku, neke riječi koja čeka sljedeću riječ, neke rečenici kojoj prijevod treba, a ostatak režimu kašnjenja koji ste izabrali. API referenca ima detalje okvir po okvir, a demo na početnoj stranici prikazuje lanac u pokretu.