Тікелей аударманың кідірісінің көбі күтуден тұрады: ағынды, келесі сөзді, сөйлемді күту. Сіз басқара алатын жалғыз бөлік — латентілік режимі: аз кідіріс немесе аз түзету.
Тікелей аударманы оқып отырған тыңдаушы әр жолды баяндаушы айтқаннан кейін бірнеше секунд өткен соң көреді. Бұл кідіріс бір емес, тізбек бойымен қосылған бірнешеу, және олардың көпшілігі — күту. Олардың әрқайсысының қай күту екенін білу латентілік режимін таңдауды оңай етеді, ал оқырманды жасайтын әзірлеушіге не және қашан көрсету керек екенін айтады.
Сандарға дейін пайдалы өлшем: адам синхрондық аудармашысы әдетте баяндаушыдан екі-төрт секунд артта сөйлейді. Аудармашылар бұл алшақтықты ear-voice span деп атайды, ал етістігі соңында келетін тілдермен олар етістікті күтпей, оны болжау арқылы немесе сөйлемді өз алдына тұра алатын бөліктерге бөлу арқылы жұмыс істейді. Бір-екі секундтық кідіріс — бағдарламалық жасақтаманың кемшілігі емес; бұл өте жақсы маманның да істейтін іс-әрекеті.
VocalStack-тағы әрбір тікелей транскрипция бірдей кезеңдерден, бірдей ретпен өтеді, және әр кезең алдыңғысын күтеді.
Түпнұсқа тілдегі мәтін оқырманға айтылғанымен бірге жетеді. Аударма бір-екі секунд кейін келеді, ал айтылған сөйлем өзінің аудармасынан кейін келеді, сондықтан дауыстық клип әрқашан соңғы болып келеді. Бірақ тізбектің алғашқы көрінетін әсері дауыстан әлдеқайда бұрын басталады: мәтіннің өзі қозғала бастайды.
Тікелей транскрипцияда адамдар бірінші байқайтыны — ең соңғы сөздер қозғалады. Фраза пайда болады, өзгереді және тұрақтанады. Бұл — жоба кезеңінің жұмысы, және ол кез келген сөйлеуді тану жүйесіне қатысты себеппен бар.
Тану жүйесі сөзді оның артынан келетін сөзге қарап шешеді. "I scream" пен "ice cream" келесі сөз келмейінше бірдей естіледі; соңындағы "s" дыбысы осы сөзге де, келесі сөзге де тиесілі болуы мүмкін. Сөздің оң жағында аудио болмайынша, оның жазылуы болжам болып қалады, сондықтан кез келген тікелей мәтіндегі ең соңғы сөздер әрқашан ең аз анық болады. Жоба — жай ғана болжамды ерте көрсету, оны жасыру емес.
Әр жаңа жоба тікелей соңғы бөлікті толық алмастырады: соңғы бекітуден бері естілген сөздер, олар әлі өзгеріп жатыр. Бекіту — соңғы. Ол ешқашан өзгермейді, сөздік деңгейдегі уақыт белгілерін алып жүреді, және бекітулер үзіліссіз нөмірленеді, сондықтан оқырман бірдеңені өткізіп алғанын байқай алады.
Әзірлеушіге realtime API үшін бір ереже міндетті: әр бекітілген сегментті көрсетіңіз, содан кейін соңғы жобаны соның артынан көрсетіңіз, ал бекіту келгенде жобаны тазартыңыз. Жобаларды қосу, оларды алмастырмай, қайталанатын, жыпылықтайтын мәтін береді; бекіту тек соңғы бөлікті жұтады. WebSocket туториалы дәл осы принципке сүйене отырып оқырманды құрады.
Хост үшін мәтіннің қозғалуы — кідіріс үшін төленетін баға. Фраза аяқталмай тұрып сөздерді көрсету транскрипцияны тікелей сезіндіреді. Алайда аударма бұл әдісті көтере алмайды, себебі сөзді жартылай фразадан болжауға болады, ал аударманы болжауға болмайды.
Аударма жобамен қадам ұстай алмайтынының себебі — сөз ретінде. Неміс етістігі сөйлем бөлігінің соңында тұруы мүмкін, ал жапон тілі етістікті соңына қояды. Кез келген аудармашы дұрыс аудару үшін бүкіл бөлікті қажет етеді. Сөзбе-сөз аудару тыңдаушыға фрагменттер береді, олар бөлік аяқталғанда оқылып үлгермеген болып шығады. Неміс тілі аудармашыларды бағдарламалық жасақтама мұны байқап көргенге дейін-ақ етістікті күтуге мәжбүр етіп келеді.
Сондықтан VocalStack бөлшектерді емес, сөйлемдерді аудартады. Сөйлемдер әдепкі бойынша қосулы, ал олар қосулы кезде сервер бекітулерді сөйлемге жинақтап, оның бүкіл мәтінін аударады. Сөйлем ашық тұрған кезде оның аудармасы уақытша болып саналады; ол жабылғанда аударма соңғы болады. Оқырман әр сөйлем үшін бір жазба ұстайды және жаңартулар келген сайын оны ауыстырады.
Сөйлеу одан да ұзағырақ күтеді. Тек жабылған сөйлем ғана айтылады, өйткені өзгеріп жатқан сөйлем әр түзету сайын қайта синтезделер еді. Ұзын сөйлем бөліктерге бөліп дауыстатылады, сондықтан біріншісі ойналып жатқанда қалғандары әлі жасалып жатыр.
Сөйлемдер өшірулі болғанда, әр бекіту өзінің аударма кадрын алады. Бұл жол ешнәрсені күтпейді, бірақ бүтін сөйлемдер оқуға әлдеқайда ыңғайлы.
Осы барлық күтулер аудио VocalStack-ке жеткен сәттен бастап өлшенеді. Көптеген трансляцияларда аудио оған жеткенде бұрыннан кешігіп үлгерген болады.
Дереккөз микрофон емес, ағын болғанда, аудио транскрипция басталғанға дейін-ақ артта қалады. Ол ағынның тікелей шетінен (live edge), яғни ағын жариялаған ең соңғы сәттен кешігеді.
Жай HTTP аудио ағыны — интернет радио станциялары жариялайтын түрі — әдетте бір-үш секундқа артта жүреді. Сервер жарылыс буферін (burst buffer) ұстайды: соңғы аудионың бірнеше секундын бірден жібереді, сондықтан жаңа тыңдаушының плеері кідіріссіз іске қосыла алады. Әр тыңдаушы, VocalStack қоса, сол қашықтыққа артта қалады. HLS одан да нашар: оның плейлисттері клиентті тікелей шеттен үш сегментке артта бастайды, бұл сегмент ұзақтығына байланысты бірнеше секундтан отыз секундқа дейін болады. Стандартты DASH әдетте HLS-пен бір диапазонда болады; тек оның low-latency нұсқасы ғана одан едәуір төмен түседі. Станцияның "тікелей" ағыны хаттың "жаңа" болатыны сияқты ғана тікелей болуы мүмкін.
Бұл мәндер шамамен алынған, және олар ағынға тиесілі, транскрипцияға емес: VocalStack жағындағы ешқандай параметр оларды қайтара алмайды. Егер сол секундтар оқиға үшін маңызды болса, аудионы ашық ағыннан емес, микрофоннан немесе энкодерден беріңіз. Ағын кідірісі VocalStack ешбір сөзді естімей тұрып-ақ белгіленеді; ал жылжытуға болатыны — латентілік режимі.
Латентілік режимінің бір ғана қызметі бар: ол кідіріс пен дәлдік арасындағы тепе-теңдікті белгілейді. Параметр тікелей транскрипция құрылғанда Advanced астында орналасқан, ал ол жұмыс істеп тұрғанда Speed қойындысында. Онда чип AUTO, SPEED немесе ACCURACY деп көрсетеді (Fast SPEED ретінде шығады). API арқылы session.update ағын ішінде режимді өзгертеді.
Сауда атаулар айтып тұрғандай. Fast мәтінді ертерек шығарады, бірақ оның көбін қайта түзетеді; Accuracy аз уақыт алады және аз түзетеді. Отырып аударылған субтитрлерді оқитын көрермен бір секундтық қосымша кідірісті сирек байқайды, бірақ үнемі өзгеріп тұратын сөздерді байқайды. Сондықтан, график тегіс тұрған жағдайда, Accuracy көбіне ең жақсы параметр болады. Auto өз әрекетін көрсетеді: жабу үшін жылдамдатылған жол хост транскриптінде FAST MODE белгісімен көрсетіледі, сол жерде дәлдік төмендеуі мүмкін деген ескертумен.
Режим қандай болса да, транскрипция бірінші сөзге дейін дайын болуы керек, ал оны дайындау — тізбектің бір рет қана төлейтін кідірісі.
Кейбір тарифтерде тікелей транскрипцияны іске қосу бірнеше секунд алады. Ұзақтығы тарифке байланысты: бағалар бетіндегі Start-up speed жолы pay as you go тарифіндегі суық іске қосудан 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 анықтамасында кадр-кадрлап толық мәлімет бар, ал басты беттегі демо тізбектің қалай жұмыс істейтінін көрсетеді.