Suurin osa live-käännöksen viiveestä on odottamista: virran, seuraavan sanan ja lauseen odottamista. Ainoa osa, jonka itse valitset, on viivetila: vähemmän viivettä tai vähemmän korjauksia.
Live-käännöksen lukija näkee jokaisen rivin muutaman sekunnin sen jälkeen, kun puhuja on sanonut sen. Viive ei ole yksi vaan useita, jotka kertyvät ketjussa, ja suurin osa niistä on eräänlaista odottamista. Kun tietää, mikä odotus on mikäkin, viivetilan valinta on helppo, ja se kertoo kehittäjälle, joka rakentaa lukijaa, mitä ja milloin näytetään.
Hyödyllinen vertailukohta ennen lukuja: ihminen simultaanitulkki puhuu tyypillisesti kahden–neljän sekunnin päässä puhujasta. Tulkit kutsuvat tätä väliä korva–ääni-väliksi. Lauseen lopussa verbin sisältävien kielten kanssa he eivät odota verbiä vaan ennakoivat sitä tai pilkkovat lauseen osiin, jotka pystyvät seisomaan yksin. Sekunnin tai kahden viive ei ole ohjelmiston vika; se on suunnilleen sitä, mitä hyvä ihminenkin tekee.
Jokainen VocalStackin live-litterointi kulkee samojen vaiheiden läpi samassa järjestyksessä, ja jokainen odottaa edellistä.
Alkuperäiskielinen teksti saavuttaa lukijan lähes samalla hetkellä kuin se puhutaan. Käännös seuraa sekunnin tai kahden päästä, ja puhuttu lause tulee käännöksen jälkeen, minkä vuoksi puheklippi saapuu aina viimeisenä. Ketjun ensimmäinen näkyvä vaikutus tulee kuitenkin kauan ennen mitään ääntä: itse teksti liikkuu.
Ensimmäinen asia, jonka ihmiset live-litteraatissa huomaavat, on se, että uusimmat sanat liikkuvat. Fraasi ilmestyy, muuttuu ja vakiintuu. Tämä on luonnosvaiheen toimintaa, ja sillä on syy, joka koskee jokaista puheentunnistinta.
Tunnistin vakiinnuttaa sanan katsomalla, mitä sen jälkeen tulee. ”I scream” ja ”ice cream” kuulostavat samoilta, kunnes seuraava sana saapuu; loppu-s voi kuulua tähän sanaan tai seuraavaan. Ennen kuin sanan oikealla puolella on ääntä, sen kirjoitusasu on arvaus. Siksi uusimmat sanat live-litteraatissa ovat aina epävarmimpia. Luonnos on yksinkertaisesti tämä arvaus, joka näytetään ajoissa sen sijaan, että se piilotettaisiin.
Jokainen luonnos korvaa kokonaan suoran tekstin loppuosan eli viimeisen vahvistuksen jälkeen kuullut sanat, jotka vielä muuttuvat. Vahvistus on lopullinen. Se ei koskaan muutu, siinä on sanakohtaiset ajoitukset, ja vahvistukset on numeroitu ilman aukkoja, jotta lukija huomaa, jos jokin on jäänyt väliin.
Kehittäjälle tämä on se yksi sääntö, jonka reaaliaikainen rajapinta ehdottomasti vaatii: renderöi jokainen vahvistettu segmentti, sen jälkeen viimeisin luonnos, ja tyhjennä luonnos, kun vahvistus saapuu. Jos luonnoksia lisätään korvaamisen sijaan perään, teksti monistuu ja vilkkuu; vahvistus yksinkertaisesti kuluttaa loppuosan. WebSocket-opetusohjelma rakentaa lukijan juuri tämän varaan.
Tapahtuman järjestäjälle liikkuva teksti on hinta matalasta viiveestä. Sanojen näyttäminen ennen kuin fraasi on valmis saa litteraatin tuntumaan suoralta. Käännös ei kuitenkaan voi käyttää tätä temppua, sillä sana voidaan arvata puolesta fraasista, mutta käännöstä ei voi.
Sanajärjestys on syy siihen, miksi käännös ei pysy luonnoksen tahdissa. Saksan verbi voi olla lauseensa lopussa, ja japani asettaa verbin viimeiseksi. Kääntäjä tarvitsee koko lauseen ennen kuin voi esittää sen uskollisesti. Sana sanalta kääntäminen antaa kuuntelijalle palasia, jotka lauseen päättyessä pitää kirjoittaa uusiksi. Saksan vuoksi tulkit ovat odottaneet verbiä jo kauan ennen kuin ohjelmistot alkoivat yrittää.
Siksi VocalStack kääntää lauseita, ei segmenttejä. Lauseet ovat oletuksena päällä, ja silloin palvelin kokoaa vahvistukset lauseeksi ja kääntää koko lauseen. Kun lause on auki, sen käännös on väliaikainen; kun se sulkeutuu, käännös on lopullinen. Lukija pitää yhtä merkintää lausetta kohden ja korvaa sen päivitysten saapuessa.
Puhe odottaa vielä pidempään. Vain suljettu lause puhutaan, sillä lause, joka vielä muuttuu, syntetisoitaisiin uudelleen jokaisella korjauksella. Pitkä lause puhutaan osina, jotta ensimmäinen osa voi soida, kun loput vielä tehdään.
Kun lauseet ovat pois päältä, jokainen vahvistus saa oman käännöskehyksensä. Tämä polku ei odota mitään, mutta kokonaiset lauseet luetaan huomattavasti paremmin.
Kaikki nämä odotukset mitataan siitä hetkestä, kun ääni saavuttaa VocalStackin. Monissa lähetyksissä ääni oli jo myöhässä, kun se saapui perille.
Kun lähde on virta eikä mikrofoni, ääni on jo jäljessä ennen kuin mitään litteroidaan. Se jää jälkeen suorasta reunasta eli uusimmasta hetkestä, jonka virta on julkaissut.
Tavallinen HTTP-äänivirta, sellainen jota useimmat internet-radioasemat julkaisevat, on tyypillisesti sekunnin tai kolmen jäljessä. Palvelin pitää purskepuskuria: muutaman sekunnin verran tuoretta ääntä, joka lähetetään kerralla, jotta uuden kuuntelijan soitin voi käynnistyä ilman pysähtymistä. Jokainen kuuntelija, myös VocalStack, liittyy tuon matkan päästä. HLS on huonompi: sen soittolistat aloittavat asiakkaan kolme segmenttiä suorasta reunasta, mikä käytännössä tarkoittaa useita sekunteja tai puoli minuuttia segmentin pituudesta riippuen. Tavallinen DASH asettuu yleensä samalle alueelle kuin HLS; vain sen matalan viiveen muunnos jää selvästi tuota alemmas. Aseman ”live”-virta voi olla live samalla tavalla kuin kirje on ajan tasalla.
Nämä luvut ovat suuntaa antavia, ja ne kuuluvat virralle, eivät litterointiin: mikään VocalStackin puolen asetus ei pysty palauttamaan niitä. Jos nuo sekunnit ovat tärkeitä tapahtumassa, syötä lavan ääni mikrofonista tai enkooderista eikä julkisesta virrasta. Virran viive on lukittu ennen kuin VocalStack kuulee yhtäkään sanaa; viivetila on se, mihin voit oikeasti vaikuttaa.
Viivetila tekee yhden asian: se asettaa tasapainon viiveen ja tarkkuuden välille. Asetus on live-litteroinnin luomisessa kohdassa Advanced, ja sen käynnistyttyä Speed-välilehdellä. Siellä siru näyttää AUTO, SPEED tai ACCURACY (Fast näkyy nimellä SPEED). API:n kautta session.update vaihtaa tilan kesken virran.
Kompromissi on nimien kertoma. Fast saa tekstin ulos aiemmin mutta korjaa siitä enemmän; Accuracy vie hieman kauemmin ja korjaa vähemmän. Istuva yleisö, joka lukee käännettyjä tekstityksiä, tuskin huomaa ylimääräistä sekuntia, mutta huomaa sanat, jotka vaihtuvat koko ajan. Accuracy on siksi usein lempeämpi asetus, kunhan viivekäyrä pysyy tasaisena. Auto näyttää korttinsa: rivi, jonka se nopeutti kuromaan kiinni viivettä, saa järjestäjän litteraatissa FAST MODE -merkin ja huomautuksen, että tarkkuus voi olla siinä kohdassa heikompi.
Tilasta riippumatta litteroinnin on oltava valmis ennen ensimmäistä sanaa, ja sen valmiiksi saaminen on ainoa viive, jonka ketju maksaa vain kerran.
Joillakin paketeilla live-litterointi kestää muutaman sekunnin käynnistyä. Kesto riippuu paketista: hinnoittelusivun rivillä Start-up speed kylmäkäynnistys vaihtelee paketin Pay as you go enintään 15 sekunnista Enterprise-paketin aina lämpimään.
API:n kautta odotus näkyy session.loading-kehyksinä istunnon käynnistyessä ja sen jälkeen session.ready-kehyksenä; asiakas lähettää äänen vasta sitten. Kuuntelija, joka avaa linkin sillä välin, näkee tekstin ”Live. The first line appears in a moment.” Kun litterointi on käynnissä, tämä viive jää taakse, ja jäljelle jää enää kysymys siitä, kuinka paljon jäljellä olevaa viivettä kannat mukanasi.
Live-litteroinnin ollessa käynnissä järjestäjän Speed-välilehti näyttää, mihin tämä kaikki kokonaisuudessaan kertyy: nykyisen välin puhujan ja tekstin välillä viereisen tilasirun kanssa sekä kaavion tuon välin kehityksestä tallenteen ajalta, keskiarvon ja huipun kanssa. Itse litteraatissa rivillä, joka saapui kuuntelijoille myöhässä, on merkki, joka kertoo sekuntien määrän puhumisen hetken ja saapumisen välillä.
Matala ja tasainen kaavio tarkoittaa, että tila sopii äänelle. Nouseva kaavio tarkoittaa, että putki jää jälkeen. Accuracy-tilassa voi olla aika siirtyä Autoon, joka vaihtaa osan tarkkuudesta nopeuteen, kunnes väli kuroutuu umpeen.
Kehittäjät saavat sen sijaan yhden luvun. Kun reaaliaikainen istunto päättyy, session.done sisältää arvon stats.realtimeFactor, eli litteroidun äänen keston jaettuna sen litteroimiseen kuluneella ajalla. Yksi käytäntöhuomautus: puheentunnistuksen kirjallisuudessa reaaliaikakerroin tarkoittaa yleensä päinvastaista, käsittelyajan suhdetta äänen kestoon, jossa pienempi on parempi. VocalStack raportoi sen toisin päin, joten tässä suurempi on parempi: live-istunto on lähellä lukua 1, ja alle 1 tarkoittaa, että ääni saapui nopeammin kuin putki ehti sen litteroida.
Mikään näistä sekunneista ei ole salaperäinen. Osa kuuluu virralle, osa sanalle, joka odottaa seuraavaa sanaa, osa lauseelle, jota käännös tarvitsee, ja loput valitsemallesi viivetilalle. API-viite kertoo kehys kehykseltä -tarkat tiedot, ja etusivun demo näyttää ketjun käynnissä.