Большая частка затрымкі ў перакладзе ў рэальным часе — гэта чаканне: чаканне патоку, наступнага слова, сказа. Адна частка, якой вы можаце кіраваць, — рэжым затрымкі: меншая затрымка або менш праўкі.
Слухач, які чытае пераклад у рэальным часе, бачыць кожны радок праз некалькі секунд пасля таго, як прамоўца яго сказаў. Гэты разрыў складаецца не з адной затрымкі, а з некалькіх, якія складаюцца ўздоўж ланцужка, і большасць з іх — гэта форма чакання. Ведаючы, якое чаканне якое, лёгка абраць рэжым затрымкі, а распрацоўшчыку, які будуе чытач, — зразумець, што і калі выводзіць.
Карысная адзнака перад лічбамі: сінхронны перакладчык-чалавек звычайна гаворыць з затрымкай у два–чатыры секунды ад прамоўцы. Перакладчыкі называюць гэты разрыў «прамежак паміж вухам і голасам» (ear-voice span), і з мовамі, дзе дзеяслова стаіць у канцы, яны спраўляюцца не чаканнем дзеяслова, а яго прадбачаннем або падзелам сказа на часткі, якія могуць стаяць самастойна. Секунда ці дзве затрымкі — не недахоп праграмнага забеспячэння; гэта прыблізна тое, што робіць вельмі добры чалавек.
Кожная транскрыпцыя ў рэальным часе на VocalStack праходзіць праз адны і тыя ж этапы, у адным і тым жа парадку, і кожны чакае папярэдні.
Тэкст на мове арыгінала чытач бачыць амаль адразу, як ён гучыць. Пераклад ідзе за ім праз секунду-дзве, а агучаны сказ ідзе пасля свайго перакладу, таму кліп з голасам заўсёды прыходзіць апошнім. Аднак першы бачны эфект ланцужка з’яўляецца задоўга да голасу: сам тэкст рухаецца.
Першае, што заўважаюць людзі ў транскрыпце ў рэальным часе, — тое, што самыя новыя словы рухаюцца. Фраза з’яўляецца, мяняецца і ўсталёўваецца. Гэта і ёсць этап чарнавіка ў дзеянні, і ён існуе па прычыне, якая датычыцца любога распазнавальніка маўлення.
Распазнавальнік вызначае слова, гледзячы на тое, што ідзе пасля яго. «I scream» і «ice cream» гучаць аднолькава, пакуль не прыйдзе наступнае слова; канцавое «s» можа належаць гэтаму слову або наступнаму. Пакуль справа ад слова няма гуку, яго напісанне — здагадка, таму самыя новыя словы ў любой транскрыпцыі ў рэальным часе заўсёды найменш пэўныя. Чарнавік — гэта проста здагадка, паказаная раней, а не схаваная.
Кожны чарнавік цалкам замяняе жывы хвост: словы, пачутыя пасля апошняй фіксацыі, якія яшчэ мяняюцца. Фіксацыя — канчатковая. Яна ніколі не мяняецца, мае таймінгі на ўзроўні слоў, а фіксацыі нумаруюцца без прапускаў, каб чытач мог заўважыць, калі нешта прапусціў.
Для распрацоўшчыка гэта адзінае правіла, на якім настойвае API ў рэальным часе: вывесці кожны зафіксаваны сегмент, затым апошні чарнавік пасля іх, а чарнавік ачысціць, калі прыходзіць фіксацыя. Даданне чарнавікоў замест замены дае дублікаты і мігценне тэксту: фіксацыя проста забірае хвост. У падручніку па WebSocket чытач пабудаваны менавіта вакол гэтага.
Для вядучага рух тэксту — цана нізкай затрымкі. Паказ слоў да таго, як фраза скончана, і робіць транскрыпт жывым. Перакладу ж гэты трук не па сілах, бо слова можна здагадацца па палове фразы, а пераклад — не.
Парадак слоў — тое, чаму пераклад не можа ісці ў нагу з чарнавіком. Нямецкі дзеяслоў можа стаяць у канцы часткі сказа, а японская ставіць дзеяслоў апошнім. Любы перакладчык патрабуе ўсёй часткі сказа, каб аддаць яе дакладна. Перакладаць слова за словам — значыць даць слухачу фрагменты, якія трэба будзе перачытваць, калі частка сказа закончыцца. Перакладчыкі з нямецкай чакалі дзеяслова задоўга да таго, як праграмы паспрабавалі гэта зрабіць.
Таму VocalStack перакладае сказы, а не сегменты. Сказы ўключаны па змаўчанні, і калі яны ўключаны, сервер складае фіксацыі ў сказ і перакладае яго цалкам. Пакуль сказ адкрыты, яго пераклад — папярэдні; калі ён закрыўся, пераклад — канчатковы. Чытач трымае адзін запіс на сказ і замяняе яго, калі прыходзяць абнаўленні.
Маўленне чакае яшчэ даўжэй. Агучваецца толькі закрыты сказ, бо сказ, які яшчэ мяняецца, перасінтэзоўваўся б пры кожнай праўцы. Доўгі сказ агучваецца часткамі, каб першая частка магла гучаць, пакуль астатнія яшчэ робяцца.
Калі сказы выключаныя, кожная фіксацыя атрымлівае ўласны кадр перакладу. Такі шлях нічога не чакае, але цэлыя сказы чытаюцца значна лепш.
Усе гэтыя чаканні вымяраюцца ад моманту, калі гук трапляе ў VocalStack. Для многіх трансляцый гук ужо спазніўся, калі дайшоў да нас.
Калі крыніца — паток, а не мікрафон, гук ужо адстае, перш чым што-небудзь транскрыбуецца. Ён адстае ад жывога краю, самага новага моманту, які паток апублікаваў.
Звычайны HTTP-аўдыяпаток, які публікуюць большасць інтэрнэт-радыёстанцый, звычайна адстае на секунду-тры. Сервер трымае буфер пачатковай загрузкі: некалькі секунд апошняга гуку, адпраўленыя адразу, каб плэер новага слухача мог пачаць без затрымак. Кожны слухач, у тым ліку VocalStack, далучаецца з такім адставаннем. HLS горш: яго плэйлісты пачынаюць кліента на трох сегментах ад жывога краю, што на практыцы азначае некалькі секунд да паўхвіліны ў залежнасці ад даўжыні сегмента. Стандартны DASH звычайна трапляе ў той жа дыяпазон, што і HLS; толькі яго варыянт з нізкай затрымкай адстае значна менш. «Жывы» паток станцыі можа быць жывым у тым жа сэнсе, у якім ліст бывае актуальным.
Гэтыя лічбы прыблізныя і належаць патоку, а не транскрыпцыі: ніякая налада на баку VocalStack не можа вярнуць гэтыя секунды. Калі яны важныя для падзеі, падавайце гук з мікрафона або кадавальніка, а не з публічнага патоку. Затрымка патоку фіксуецца да таго, як VocalStack пачуе хоць адно слова; рэжым затрымкі — тое, што вы сапраўды можаце рухаць.
Рэжым затрымкі робіць адну рэч: задае баланс паміж затрымкай і дакладнасцю. Налада размешчана ў Advanced пры стварэнні транскрыпцыі ў рэальным часе, а на ўкладцы Speed — падчас працы. Там чып паказвае AUTO, SPEED або ACCURACY (Fast адлюстроўваецца як SPEED). Праз API session.update мяняе рэжым падчас патоку.
Кампраміс той, які назвы і падказваюць. Fast дае тэкст хутчэй, але перагледжвае яго больш; Accuracy чакае трохі даўжэй і перагледжвае менш. Гледачы, якія чытаюць перакладзеныя субцітры, рэдка заўважаюць лішнюю секунду, але заўважаюць словы, якія ўвесь час мяняюцца. Таму Accuracy часта больш спагадлівая налада, пакуль графік затрымкі роўны. Auto не хавае сваіх дзеянняў: радок, які ён паскорыў, каб закрыць разрыў, мае значок FAST MODE у транскрыпце вядучага з заўвагай, што дакладнасць там можа быць ніжэйшай.
Якім бы ні быў рэжым, транскрыпцыя павінна быць гатовая да першага слова, і падрыхтоўка — адзіная затрымка, якую ланцужок плаціць толькі раз.
На некаторых тарыфах транскрыпцыя ў рэальным часе запускаецца некалькі секунд. Колькі — залежыць ад тарыфу: радок «Start-up speed» на старонцы цэнаў ахоплівае ад халоднага старту да 15 секунд на Аплаце па факце выкарыстання да заўсёды гатовага стану на Enterprise.
Праз API чаканне адлюстроўваецца як фрэймы session.loading, пакуль сесія запускаецца, затым session.ready; кліент адпраўляе гук толькі пасля гэтага. Слухач, які адкрые спасылку ў гэты час, бачыць "Live. The first line appears in a moment." Пасля таго як транскрыпцыя працуе, гэта затрымка пазаду, і застаецца толькі пытанне, колькі з астатняй затрымкі вы нясяце.
Пакуль транскрыпцыя ў рэальным часе працуе, на ўкладцы Speed вядучага паказваецца, якую суму ўсё гэта дае: бягучы разрыў паміж прамоўцам і тэкстам побач з чыпам рэжыму, а таксама графік гэтага разрыву па ўсім запісе з сярэднім і пікавым значэннем. У самой транскрыпцыі радок, які дайшоў да слухачоў позна, мае значок з колькасцю секунд паміж тым, як ён быў сказаны, і тым, як дайшоў.
Графік, які стаіць нізка і роўна, азначае, што рэжым падыходзіць да гуку. Графік, які расце, азначае, што ланцужок адстае. На Accuracy гэта можа быць момант перайсці на Auto, які ахвяруе часткай дакладнасці дзеля хуткасці, пакуль разрыў не закрыецца.
Распрацоўшчыкі атрымліваюць адну лічбу. Калі сесія ў рэальным часе скончыцца, session.done утрымлівае stats.realtimeFactor — колькасць транскрыбаванага гуку, падзеленую на час, які пайшоў на яго транскрыбаванне. Адно папярэджанне пра ўмовы: у літаратуры па распазнаванні маўлення real-time factor звычайна азначае адваротнае — час апрацоўкі да часу гуку, дзе меншае лепш. VocalStack паказвае яго наадварот, таму тут большае лепш: жывая сесія знаходзіцца каля 1, а ніжэй за 1 азначае, што гук прыходзіў хутчэй, чым ланцужок паспяваў транскрыбаваць.
Ніякія з гэтых секунд не таямнічыя. Адны належаць патоку, другія — слову, якое чакае наступнага слова, трэція — сказу, які патрабуе перакладу, а астатнія — рэжыму затрымкі, які вы абралі. Даведка па API змяшчае падрабязнасці па фрэймах, а дэма на галоўнай старонцы паказвае ланцужок у дзеянні.