Најголемиот дел од доцнењето при живо превод е чекање: на потокот, на следниот збор, на реченицата. Единиот дел што го контролирате е режимот на доцнење: помалку доцнење или помалку корекции.
Слушателот што чита живо превод ја гледа секоја линија неколку секунди откако говорникот ја изговорил. Тој јаз не е едно доцнење, туку неколку, собрани по ланец, и повеќето од нив се облик на чекање. Ако знаете кое чекање е кое, режимот на доцнење е лесен избор, а програмерот што гради читач ќе знае што да прикаже и кога.
Корисна мерка пред броевите: човечки симултан толкувач обично зборува две до четири секунди зад говорникот. Толкувачите тој јаз го нарекуваат ear-voice span, а јазиците каде глаголот е на крај не ги спасуваат со чекање на глаголот, туку со предвидување или со делење на реченицата на делови што можат да стојат сами. Една или две секунди доцнење не е недостаток на софтверот; тоа е приближно она што го прави многу добар човек.
Секоја транскрипција во живо на VocalStack минува низ истите фази, истиот редослед, и секоја чека на претходната.
Текстот на оригиналниот јазик стигнува до читателот речиси онака како што се изговара. Преводот доаѓа една или две секунди подоцна, а изговорената реченица доаѓа по нејзиниот превод, затоа гласовниот клип секогаш стигнува последен. Првиот видлив ефект на синџирот сепак доаѓа долго пред секој глас: самиот текст се движи.
Првото нешто што луѓето го забележуваат во транскрипцијата во живо е дека најновите зборови се поместуваат. Фраза се појавува, се менува и се смирува. Тоа е фазата на нацрт во дејство, и постои од причина што важи за секој препознавач на говор.
Препознавачот збор го одредува така што гледа што следи по него. „I scream“ и „ice cream“ звучат исто додека не дојде следниот збор; завршното „s“ може да припаѓа на овој збор или на следниот. Додека нема звук десно од некој збор, неговото пишување е погодување, па најновите зборови во секоја транскрипција во живо се секогаш најмалку сигурни. Нацртот е едноставно тоа погодување прикажано рано, наместо скриено.
Секој нацрт целосно го заменува живиот крај: зборовите слушнати од последната потврда, кои уште се менуваат. Потврдата е конечна. Таа никогаш не се менува, носи временски ознаки на ниво на збор, а потврдите се нумерирани без празнини, за читателот да знае дали пропуштил една.
За програмерот ова е единственото правило што realtime API-то строго го бара: прикажи го секој потврден сегмент, па најновиот нацрт после нив, а нацртот да се исчисти кога ќе пристигне потврда. Додавањето нацрти наместо нивно заменување дава дуплиран, треперлив текст; потврдата едноставно го троши крајот. WebSocket упатството гради читач токму околу ова.
За домаќинот, поместувањето на текстот е цената на ниското доцнење. Прикажувањето зборови пред да заврши фразата е она што го прави транскрипцијата да изгледа жива. Преводот, сепак, не може да си го дозволи тој трик, бидејќи збор може да се погоди од половина фраза, но превод не може.
Редоследот на зборовите е причината зошто преводот не може да биде во чекор со нацртот. Германскиот глагол може да стои на крајот на клаузата, а јапонскиот го става глаголот последен. Секој преведувач му треба целата клауза за верно да ја пренесе. Преведувањето збор по збор му дава на слушателот фрагменти што мора да се дочитаат кога клаузата ќе се затвори. Германските толкувачи го чекаат глаголот уште долго пред софтверот воопшто да се обиде да го направи тоа.
Затоа VocalStack преведува реченици, а не сегменти. Речениците се вклучени по основно, и кога се вклучени, серверот ги составува потврдите во реченица и ја преведува целата. Додека реченицата е отворена, нејзиниот превод е привремен; откако ќе се затвори, преводот е конечен. Читачот држи по една ставка за секоја реченица и ја заменува кога ќе пристигнат ажурирања.
Говорот чека уште подолго. Се изговара само затворена реченица, бидејќи реченица што уште се менува би се синтетизирала повторно при секоја корекција. Долга реченица се озвучува на делови, за првиот да може да се пушти додека се прават останатите.
Со исклучени реченици, секоја потврда добива свој превод наместо тоа. Тој пат ништо не чека, но целите реченици се многу почитливи.
Сите овие чекања се мерат од моментот кога звукот ќе стигне до VocalStack. Кај многу преноси, звукот веќе бил доцнат кога ќе стигнел таму.
Кога изворот е поток, а не микрофон, звукот веќе е зад тоа пред да се транскрибира. Тој заостанува зад live edge, најновиот момент што потокот го објавил.
Обичен HTTP аудио поток, каков што објавуваат повеќето радио-станици на интернет, обично заостанува една до три секунди. Серверот води burst buffer: неколку секунди скорешен звук, испратен одеднаш, за плеерот на новиот слушател да почне без застанување. Секој слушател, вклучувајќи го и VocalStack, се приклучува толку назад. HLS е полош: неговите плејлисти го почнуваат клиентот три сегменти зад live edge, што во пракса значи неколку секунди до половина минута, зависно од должината на сегментите. Стандардниот DASH обично е во истиот опсег како HLS; само неговата варијанта со ниско доцнење паѓа значајно под тоа. Потокот што станицата го нарекува „во живо“ може да биде во живо на ист начин како писмо што е „актуелно“.
Овие бројки се приближни и се однесуваат на потокот, а не на транскрипцијата: ниту една поставка на страната на VocalStack не може да ги врати. Ако тие секунди се важни за настан, внесете го звукот на фазата од микрофон или енкодер, а не од јавен поток. Доцнењето на потокот е утврдено пред VocalStack да чуе ниту еден збор; режимот на доцнење е она што навистина можете да го поместите.
Режимот на доцнење прави една работа: ја поставува рамнотежата помеѓу доцнењето и точноста. Поставката е под Advanced при создавање на транскрипција во живо, а на картичката Speed додека работи. Таму чипот пишува AUTO, SPEED или ACCURACY (Fast се појавува како SPEED). Преку API-то, session.update го менува режимот во текот на потокот.
Компромисот е оној што го сугерираат имињата. Fast текстот го извлекува побрзо, но корегира повеќе од него; Accuracy потрае малку подолго и корегира помалку. Публика што седи и чита преведени титлови ретко забележува дополнителна секунда, но забележува зборови што постојано се менуваат. Затоа Accuracy често е поблага поставка, сè додека графиконот на доцнење остане рамен. Auto јасно покажува што прави: линија што ја забрзал за да затвори јаз ја носи значката FAST MODE во транскрипцијата на домаќинот, со забелешка дека точноста таму може да биде пониска.
Без оглед на режимот, транскрипцијата мора да биде подготвена пред првиот збор, а нејзината подготовка е единственото доцнење што ланецот го плаќа само еднаш.
На некои пакети транскрипцијата во живо треба неколку секунди за да почне. Колку долго зависи од пакетот: редот „Брзина на стартување“ на страницата со цени оди од студен почеток до 15 секунди кај Плаќање според користење до секогаш топло кај Enterprise.
Преку API-то, чекањето се појавува како рамки session.loading додека сесијата почнува, па session.ready; клиентот испраќа звук дури потоа. Слушател што ќе го отвори линкот во меѓувреме гледа „Во живо. Првата линија се појавува за момент.“ Откако транскрипцијата ќе работи, тоа доцнење е зад вас, а единственото прашање што останува е колку од преостанатото доцнење носите.
Додека транскрипцијата во живо работи, картичката Speed на домаќинот го прикажува збирот на сето ова: тековниот јаз помеѓу говорникот и текстот, со чипот на режимот до него, и график на тој јаз низ целото снимање со неговиот просек и врв. Во самата транскрипција, линија што стигнала до слушателите доцна носи ознака со бројот секунди помеѓу моментот кога е изговорена и моментот кога стигнала.
График што останува низок и рамен значи дека режимот одговара на звукот. График што расте значи дека цевководот заостанува. Кај Accuracy, тоа може да биде моментот да се префрлите на Auto, која разменува малку точност за брзина додека јазот не се затвори.
Програмерите добиваат единствен број. Кога ќе заврши realtime сесијата, session.done го содржи stats.realtimeFactor, транскрибираното аудио поделено со времето потрошено на неговата транскрипција. Едно предупредување за конвенцијата: во литературата за препознавање говор, real-time factor обично значи обратното, времето на обработка поделено со времето на аудиото, каде пониската вредност е подобра. VocalStack го пресметува обратно, па тука повисокото е подобро: жива сесија е блиску до 1, а под 1 значи дека звукот пристигнал побрзо отколку што цевководот можел да го транскрибира.
Ниту една од овие секунди не е мистериозна. Некои припаѓаат на потокот, некои на зборот што чека следниот збор, некои на реченицата што ја бара преводот, а остатокот на режимот на доцнење што го избравте. API референцата ги има деталите рамка по рамка, а демото на почетната страница го прикажува ланецот во дејство.