Suurem osa reaalajas tõlke viivitusest on ootamine: voo, järgmise sõna ja lause ootamine. Ainus osa, mida saad ise mõjutada, on latentsusrežiim: vähem viivitust või vähem parandusi.
Reaalajas tõlget lugev kuulaja näeb iga rida mõne sekundi pärast seda, kui kõneleja selle ütles. See viivitus ei ole üks, vaid mitu, mis liituvad ahela kaupa, ja neist enamik on omamoodi ootamine. Kui tead, milline ootamine on milline, on latentsusrežiimi valimine lihtne, ja arendaja, kes ehitab lugejat, teab, mida ja millal kuvada.
Enne numbreid on kasulik võrdlusalus: inimtõlk simultaantõlkes räägib tavaliselt kaks kuni neli sekundit kõnelejast maha. Tõlkijad nimetavad seda vahet kõrva-hääle vahemikuks ning verbilõpulisi keeli ei tee nad nii, et ootaksid verbi, vaid ennustavad seda või jagavad lause iseseisvateks tükkideks. Sekund või kaks viivitust ei ole tarkvara viga; see on umbes see, mida väga hea inimene teeb.
Iga VocalStacki otsetranskriptsioon läbib samad etapid samas järjekorras ning iga etapp ootab eelmist.
Algkeelne tekst jõuab lugejani peaaegu samal ajal, kui seda räägitakse. Tõlge järgneb sekund või kaks hiljem ning kõneldud lause tuleb pärast oma tõlget, mistõttu häälklipp jõuab alati viimasena kohale. Ahela esimene nähtav mõju tuleb aga palju varem kui ükski hääl: tekst ise liigub.
Esimese asjana märkavad inimesed otsetranskriptsioonis seda, et kõige uuemad sõnad liiguvad. Fraas ilmub, muutub ja stabiliseerub. See on mustandietapi töö ja selle põhjus kehtib iga kõnetuvastaja kohta.
Kõnetuvastaja määrab sõna paika, vaadates, mis sellele järgneb. „I scream“ ja „ice cream“ kõlavad ühtemoodi, kuni järgmine sõna saabub; lõpus olev „s“ võib kuuluda kas selle või järgmise sõna juurde. Kuni sõna paremal pool ei ole heli, on selle kirjapilt oletus, nii et iga otsetranskriptsiooni kõige uuemad sõnad on alati kõige ebakindlamad. Mustand on lihtsalt see oletus, mis on näidatud varakult, mitte peidetud.
Iga mustand asendab täielikult elava saba ehk sõnad, mis on kuuldud pärast viimast kinnitust ja mis veel muutuvad. Kinnitus on lõplik. See ei muutu kunagi, sellel on sõnatasandi ajastused ning kinnitused on nummerdatud ilma aukudeta, nii et lugeja näeb, kui ta mõne vahele jättis.
Arendaja jaoks on see reegel, millele reaalajas API kindlalt nõuab: kuva iga kinnitatud lõik, siis nendele järgnev viimane mustand ning tühjenda mustand, kui kinnitus saabub. Mustandite liitmine asendamise asemel tekitab topelttekstigi ja vilkuva teksti; kinnitus lihtsalt tarbib saba. WebSocketi õpetus ehitab lugeja just selle ümber.
Ülekande korraldaja jaoks on liikuv tekst madala viivituse hind. Sõnade näitamine enne, kui fraas on lõppenud, teeb transkriptsiooni elavaks. Tõlge seda nippi aga endale lubada ei saa, sest sõna võib arvata pooleldi fraasi järgi, tõlget aga mitte.
Sõnajärg on põhjus, miks tõlge ei suuda mustandiga sammu pidada. Saksa keeles võib tegusõna jääda lause lõppu ja jaapani keeles asetseb tegusõna alati viimasena. Iga tõlkija vajab tervet lauset, enne kui saab seda truult edasi anda. Sõna-sõnalt tõlkimine annab kuulajale killud, mida tuleb lause lõppedes ümber mõtestada. Saksa keel on tõlkijaid verbi ootama sundinud juba ammu enne, kui tarkvara sellega katsetama hakkas.
VocalStack tõlgib seetõttu lauseid, mitte lõike. Laused on vaikimisi sees, ja kui need on sees, koondab server kinnitused lauseks ning tõlgib kogu lause. Kui lause on lahti, on selle tõlge esialgne; kui see sulgub, muutub tõlge lõplikuks. Lugeja hoiab iga lause kohta ühte kirjet ja asendab selle uuenduste saabudes.
Kõne ootab veelgi kauem. Kõneldakse ainult suletud lauset, sest lause, mis veel muutub, sünteesitaks iga parandusega uuesti. Pikk lause loetakse tükkide kaupa, nii et esimest tükki saab mängida, kuni ülejäänud valmivad.
Kui laused on välja lülitatud, saab iga kinnitus hoopis oma tõlkeraami. See tee ei oota midagi, kuid terved laused loetakse oluliselt paremini.
Kõiki neid ootamisi mõõdetakse alates hetkest, mil heli jõuab VocalStackini. Paljude ülekannete puhul oli heli sinna jõudes juba hilinenud.
Kui allikaks on voog, mitte mikrofon, on heli juba maha jäänud enne, kui midagi transkribeeritakse. See jääb maha otsevoo servast ehk uusimast hetkest, mille voog on avaldanud.
Tavaline HTTP-heliivoog, nagu enamik internetiraadiojaamu avaldab, jookseb tavaliselt sekund kuni kolm maha. Server hoiab purskepuhvrit: mõned sekundid värskeid helisid, mis saadetakse korraga, et uue kuulaja mängija saaks alustada ilma seiskumata. Iga kuulaja, sealhulgas VocalStack, liitub nii kaugel tagapool. HLS on hullem: selle esitusloendid alustavad klienti kolm segmenti otsevoo servast tagapool, mis praktikas tähendab mitmest sekundist pool minutit, sõltuvalt segmendi pikkusest. Standardne DASH jääb tavaliselt samasse vahemikku kui HLS; ainult selle madala viivitusega variant jääb sellest oluliselt allapoole. Jaama „otseülekanne“ võib olla otsene umbes samamoodi, nagu kiri on ajakohane.
Need arvud on ligikaudsed ja need kuuluvad voole, mitte transkriptsioonile: ükski VocalStacki seade ei saa neid tagasi võita. Kui need sekundid sündmuse jaoks tähtsad on, andke sündmuse heli sisse mikrofonist või enkoodrist, mitte avalikust voost. Voo viivitus on fikseeritud juba enne, kui VocalStack ühegi sõna kuuleb; latentsusrežiim on see, mida saate tegelikult muuta.
Latentsusrežiim teeb ühe asja: seab tasakaalu viivituse ja täpsuse vahel. Seade asub otsetranskriptsiooni loomisel jaotises Advanced ning töö ajal vahekaardil Speed. Seal kuvatakse märgis AUTO, SPEED või ACCURACY (Fast kuvatakse kui SPEED). API kaudu muudab session.update seda voo keskel.
Kompromiss on selline, nagu nimed ütlevad. Fast toob tekstid varem välja, kuid parandab neid rohkem; Accuracy võtab natuke kauem ja parandab vähem. Istuv publik, kes loeb tõlkitud subtiitreid, ekstra sekundit tavaliselt ei märka, kuid märkab sõnu, mis pidevalt muutuvad. Seetõttu on Accuracy sageli leebem seade, kui viivituse graafik püsib lamedana. Auto teeb oma valiku nähtavaks: rida, mida ta kiirendas lõhe sulgemiseks, kannab ülekande korraldaja transkriptsioonis märki FAST MODE ja märkust, et seal võib täpsus olla madalam.
Režiimist olenemata peab transkriptsioon olema valmis enne esimest sõna ja selle valmisolek on ainus viivitus, mille ahel maksab vaid ühe korra.
Mõne paketi puhul võtab otsetranskriptsiooni käivitamine mõne sekundi. Kaua see kestab, sõltub paketist: hinnalehe rida „Käivitamise kiirus“ ulatub paketis Maksa kasutuse järgi kuni 15 sekundi pikkuse külmstardini kuni paketini Enterprise, mis on alati soe.
API kaudu ilmub ootamine kaadritena session.loading seansi käivitumise ajal ja seejärel session.ready; klient saadab heli alles pärast seda. Kuulaja, kes avab selle vahepeal lingi, näeb: „OTSE. Esimene rida ilmub hetke pärast.“ Kui transkriptsioon on käimas, on see viivitus selja taga ja ainus küsimus, mis alles jääb, on see, kui palju sul veel viivitust kaasas on.
Kui otsetranskriptsioon käib, näitab ülekande korraldaja vahekaart Speed, kui palju kõik see kokku annab: praegune vahe kõneleja ja teksti vahel koos režiimimärgiga selle kõrval ning salvestise kogu vahe graafiku koos keskmise ja tipuga. Transkriptsioonis endas kannab rida, mis jõudis kuulajateni hilja, märgist, mis näitab sekundite arvu selle hetke ja saabumise hetke vahel.
Graafik, mis püsib madalal ja tasasena, tähendab, et režiim sobib helile. Tõusev graafik tähendab, et töötlusahel jääb maha. Accuracy-režiimis võib see olla hetk üle minna režiimile Auto, mis vahetab natuke täpsust kiiruse vastu, kuni vahe sulgub.
Arendajad saavad selle asemel ühe arvu. Kui reaalajas seanss lõpeb, kannab session.done välja stats.realtimeFactor, ehk transkribeeritud heli jagatud transkribeerimisele kulunud ajaga. Üks konventsiooni hoiatus: kõnetuvastuse kirjanduses tähendab reaalajategur tavaliselt pöördväärtust, töötlusaega heli aja suhtes, kus madalam on parem. VocalStack esitab selle vastupidi, seega siin on kõrgem parem: otsene seanss jääb ligikaudu 1 juurde ning alla 1 tähendab, et heli saabus kiiremini, kui töötlusahel suutis seda transkribeerida.
Ükski neist sekunditest ei ole salapärane. Osa kuulub voole, osa sõnale, mis ootab järgmist sõna, osa lausele, mida tõlge vajab, ja ülejäänu valitud latentsusrežiimile. API viide annab kaadrikaupa üksikasjad ning avalehe demo näitab ahelat tööl.