Бет емес, ағынды қойыңыз. Станцияның нақты аудиосы .mp3, .aac немесе .m3u8 деп аяқталатын мекенжайда тұрады, ал тікелей транскрипциялау оны алғаннан кейін тыңдап отыратын ешкім қажет емес.
Үш радиостанцияны, екі теледидар ағынын және бірнеше YouTube тікелей эфирін бақылайтын редакцияда алдымен транскрипциялау мәселесі емес, адам мәселесі туады. Біреу тыңдап отыруы керек, біреу жазуды бастауы керек. Ағынға арналған тікелей транскрипциялау осы екі міндетті де өз мойнына алады: ағынның мекенжайын беріңіз, сервер оны ашады, декодтайды және эфирде өтіп жатқанда транскрипциялайды, сондықтан баспасөз конференциясы ерте басталса да ешкім үстелде отырудың қажеті жоқ. Ең қиын бөлігі, нақтырақ айтқанда, мекенжайды табу.
Тікелей транскрипциялау аудиосын сервер өзі тартатын ағыннан ала алады: интернет-радио станциясынан, HLS плейлистінен (.m3u8), DASH манифестінен (.mpd) немесе YouTube тікелей эфирінен. Басқару тақтасында бұл — Transcriptions → New → Live бөліміндегі жаңа тікелей транскрипциялау, оның көзі микрофон емес, ағын. Мекенжай транскрипция жасалған кезде беріледі және ешқашан өзгермейді, сондықтан бақылау бір рет орнатылады да, станция жазуға тұрарлық болғанда іске қосылады.
Мекенжай веб-беттің өзі емес, ағынның өзі болуы керек. Станцияның беті — HTML; ал ол ойнататын аудио басқа жерден келеді, әдетте Icecast немесе Shoutcast серверінен, ал беттегі плеер бет жүктелгеннен кейін JavaScript арқылы сол мекенжайды табады. Сайттан «Listen», «Direct stream» немесе «Other players» сілтемесін іздеңіз: ол .mp3, .aac, .m3u, .m3u8 немесе .pls деп аяқталады. .pls немесе .m3u де аудио емес. Бұл — әрқайсысында бір ағынның мекенжайы бар бірнеше жолдан тұратын қысқа мәтіндік файл; ол компьютерлік плеерлерге бір ғана сілтеме беру үшін бар, ал VocalStack онда аталған ағынды транскрипциялайды. Егер беттің орнына бетті қойсаңыз, VocalStack оны сұрайды, HTML қайтарғанын көріп, бұл туралы хабарлайды. Әр станция ағынын өзінше жасырады; көбі оны «Listen» деп белгіленген батырманың артына жасырады, ал бұл бетте басудың қажеті жоқ жалғыз нәрсе.
Екі түрлі сілтеме бірден қабылданбайды. Spotify, SoundCloud немесе Twitch сияқты медиа ойнататын беттерге сілтемелер ешбір байланыс орнатылмай тұрып қайтарылады. Авторлық құқық арқылы қорғалған ағындар да қолдау көрсетілмейді: DRM лицензиясын қажет ететін плейлист немесе манифест бұл туралы хабарлайтын қатемен аяқталады. Кейбір ағындар станция елінен тыс сұраныстарды қабылдамайды, сондықтан кеңседе ойнайтын мекенжай шетелдегі серверден ойнамауы мүмкін. Егер ағын браузерде ойнаса, бірақ VocalStack-те ойнамаса, станция басқа плеерлерді қабылдамайды; станциядан басқа қолданбаларға рұқсат етілген мекенжай сұраңыз. Көп станция MP3, AAC немесе HLS ағынын ұсынады. Дұрыс мекенжай қолыңызда болған соң, келесі сұрақ — ол ешқашан аяқталама ма, соны білу.
Тікелей ағын ешқашан аяқталмайды, сондықтан ол файл емес. Бұл айырмашылық әсіресе YouTube үшін маңызды. Эфирде тұрған YouTube тікелей эфирі тікелей транскрипциялауға жатады, ал басқару тақтасы оны эфир барысында қадағалайды. Жоспарланған, бірақ әлі басталмаған YouTube тікелей эфирі Not live yet деп көрсетіледі және эфирге шыққаннан кейін жазылуы мүмкін. Аяқталған видео — бөлек нәрсе: оның ұзындығы бар, сондықтан ол файл ретінде транскрипцияланады. Сілтемесін Transcriptions → New бетіне қойыңыз.
Плейлистің өзі қай түр екенін айтады, және кез келген плеер айырмашылықты осылай біледі. Аяқталған HLS плейлисті #EXT-X-ENDLIST тегін немесе #EXT-X-PLAYLIST-TYPE:VOD тегін қамтиды; тікелей эфирдегісінде екеуі де жоқ, ол ұзара береді, сондықтан плеер жаңа сегменттер үшін оны бірнеше секунд сайын қайта сұрайды. DASH манифесті эфир кезінде type="dynamic", ал жазба болған соң type="static" деп жариялайды. Icecast серверінен келетін MP3 немесе AAC ағынының ұзындығы мүлдем жоқ; ол жай ғана ешқашан тоқтамайды.
Коддан GET /v1/transcriptions/probe?url= сұрауы бұл мәселені ешнәрсе сақталмай тұрып шешеді. Жауаптағы kind мәні эфирдегі немесе жоспарланған YouTube тікелей эфирі, шексіз HTTP ағыны, соңы жоқ HLS плейлисті немесе dynamic DASH манифесті үшін live болады; соңы бар кез келген нәрсе үшін file, ал probe айыра алмаса, unknown болады. Сілтеме медиа ретінде ашылмаса, ok мәні false болады, ал problem — көрсетуге болатын сөйлем. Probe ештеңе сақтамайды және минутына 60 шақырумен шектеледі.
Файлдық транскрипциялау ойнатылып жатқан аудиодан бірнеше есе жылдам жүреді, сондықтан аяқталған теледидар сағаты бір сағатқа созылмайды. Тікелей ағын нақты уақытта транскрипцияланады, бірақ «нақты уақыт» әлі эфирден артта қалады, және оның қанша екенін білу пайдалы. Icecast ағыны плеерге микрофоннан кейін бірнеше секундта жетеді. HLS және DASH сегменттелген, ал плеер әрқайсысы шамамен алты секундтық екі-үш сегмент жинамай тұрып басталмайды, сондықтан HLS ағыны транскрипция өз кідірісін қосқанға дейін әдетте эфирден 10-нан 30 секундқа артта болады. Кеш келген жол көбіне станцияның кідірісі болады, транскрипциялаушының емес. Бір ағын бір жазба жасайды; редакция бірнешеуін қосады, және олардың бәрі бір жерге жиналады.
Әр тікелей транскрипциялау файлдармен қатар Transcriptions кітапханасына түседі. Әр жазба транскриптімен бірге сақталады, ал сөздер соңғы болған соң оған барлық тілде атау мен қысқаша мазмұн жазылады. Сөйлеу тілі автоматты түрде анықталады, ал спикерлер кез келген уақытта тілді ауыстыра алады. Тілді білген кезде оны атау транскрипция сапасын жақсартады.
Кітапхана тілдер арасында іздеуге болады: кез келген тілдегі барлық транскриптен іздеңіз, нәтижелерді өз тіліңізде алыңыз. Тек ағылшын тілін оқитын тілші румын станциясының таңғы шоуынан министрдің атын іздей алады, нәтижелерді ағылшын тілінде оқиды, әр нәтиже сол сөз айтылған транскрипциямен және уақытпен бірге беріледі. Министрдің аты үш станцияда үш түрлі жазылуы мүмкін; оны ағылшынша іздеу үшеуін бөлек оқудан құтқарады.
Транскрипцияны бір мезгілде 10 тілге аударуға болады, сондықтан сол жазба редакция жұмыс істейтін әр тілде оқылады. Іздеу нәтижесі тек оны дәйексөз ретінде келтіре алсаңыз ғана пайдалы.
Транскрипт — мәтіннің жай ғана үйіндісі емес. API-дің GET /v1/recordings/{id}/transcript сұрауы sentences, сөз уақыттары бар segments және speakers қайтарады, сондықтан дәйексөзді жазбаға секундына дейін дәл орналастыруға болады. Басқару тақтасы тікелей жазбаны келгеніндей, аудиосымен бірге қайта ойнатады, сондықтан дәйексөз келтірмес бұрын сөйлемді естуге болады.
Радио аудиосының кез келген транскриптіне, кез келген жүйеден болсын, сенбес бұрын екі нәрсені білген жөн. Сөйлеуді тану дербес атауларда, жер аттарында және сандарда ең көп қателеседі, ал тілші іздейтін дәл осылар. Тану жүйесі бұрын көрмеген атауды ең жақын жалпы сөзге айналдырады, және дұрыс жазылуын іздеу оны таппайды. Оның орнына сол тыныста айтылған ерекше сөзді іздеңіз, содан кейін нәтижені айналасымен оқыңыз. Сонымен қатар радио тек сөз емес: музыкалық фон, джингл және жарнама үзілістері сөйлемге ұқсайтын, бірақ солай болмайтын жолдар береді. Дәйексөз келтірмес бұрын аудионы тексеріңіз.
Спикер белгілерінің үш параметрі бар: өшірулі, қосулы немесе When Needed, ол екінші спикер естілгеннен кейін ғана белгілерді көрсетеді. Жазбадағы спикердің атын PUT /v1/recordings/{id}/speakers/{idx} арқылы беруге болады, ал спикердің дауысы тіркелген соң, келесі жазбалар оны атымен таниды. Әр таңертең эфирге шығатын тілшілер үшін бірінші аптадан кейін белгілер «Спикер 2» болудан қалады. Дәйексөз тексерілген соң, ол редакциядан шығуы керек.
«Export» қойындысындағы әр форматтың редакцияда өз қызметі бар. SRT видео редакторына кетеді, сондықтан ағыннан алынған клипте субтитрлер болады; аударылған SRT-де олар басқа тілде болады. Excel зерттеушіге жетеді, әр сөйлемге бір жол, уақытымен бірге, сүзу және түсіндірме қосу үшін. PDF сағаттық эфирді пойызда оқығысы келетін редакторға барады. JSON редакцияның өз құралдарын жазатын адамға барады. API арқылы экспорт GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf болады, аударылған нұсқа үшін lang= параметрімен. Download audio жазбаны пакеттің өзі үшін MP3 ретінде береді.
Эфирді есеп беру үшін бақылау — қалыпты редакциялық практика. Оның клипін қайта жариялау — басқа іс. Ол сіз тұрған жердегі әділ пайдалану немесе әділ қолдану ережелерімен және станцияның өз шарттарымен реттеледі, сондықтан редакцияның бәсекелесті дәйексөз келтіру ережелері бәсекелестің аудиосына да қолданылады. Мұның бәрі басқару тақтасында бірнеше рет басудан тұрады; жиырма станциясы бар редакция үшін оны скриптпен жасау дұрыс.
Бүкіл жол API-да, әр тарифке кіреді және басқару тақтасындағыдай бағамен есептеледі. Ағыны көз болған тікелей транскрипциялау бос күйде жасалады, оны бірінші жазба іске қосады және оны HTTP арқылы басқарады. Сервер аудионы өзі тартатындықтан, жазбаны бастау үшін жариялайтын ағын қайтарылмайды: сіздің жағыңызда аудио жіберетін ештеңе жоқ.
API=$VOCALSTACK_API_ORIGIN # the origin shown in the API reference
AUTH="Authorization: Bearer $VOCALSTACK_API_KEY"
# A live transcription whose source the server pulls itself.
TX=$(jq -n '{name: "Morning show", source: {kind: "stream", url: "https://example.org/live.mp3"},
settings: {speakerLabels: "auto"}}' \
| curl -sSf "$API/v1/transcriptions/live" -H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" -d @- | jq -r .id)
# Start recording: the server opens the stream now.
REC=$(curl -sSf -X POST "$API/v1/transcriptions/$TX/recordings" -H "$AUTH" \
-H "Content-Type: application/json" -d '{}' | jq -r .recording.id)
# Later: pause, then stop (a live recording must be paused before it is stopped).
curl -sSf -X POST "$API/v1/recordings/$REC/pause" -H "$AUTH"
curl -sSf -X POST "$API/v1/recordings/$REC/stop" -H "$AUTH" -H "Content-Type: application/json" -d '{}'
# Search everything that was said, in English.
curl -sSfG "$API/v1/search" -H "$AUTH" --data-urlencode "q=budget" --data-urlencode "lang=en"
Idempotency-Key қайталанған жасау сұрауы екінші транскрипция емес, бірінші транскрипцияны қайтаратынын қамтамасыз етеді. TypeScript және Python SDK-лары дәл осы сұрауларды орайды және оларды Developers аймағынан жүктеп алуға болады; API анықтамасында әр маршрут пен оның frame-дері бар.
AI агенті кодсыз-ақ кітапханамен жұмыс істей алады. /v1/mcp мекенжайындағы MCP сервері агентке құралдар жиынтығын береді; олардың ішінде осында төртеуі маңызды. search_transcriptions аккаунттың барлық транскрипцияларынан кез келген тілде айтылғанды іздейді және сәйкес жолдарды қайтарады, әрқайсысы өз транскрипциясымен және айтылған уақытымен бірге. get_summary жазбаның қысқаша мазмұнын қайтарады. transcribe_url пен wait_for_transcription аяқталған видеоны немесе жазбаның сілтемесін транскрипциялайды және нәтижені күтеді. Тікелей ағынды бақылауды іске қосу басқару тақтасында немесе жоғарыдағы API арқылы қалады. Claude Code, Cursor немесе кез келген Streamable HTTP клиенті үшін баптау Developers → Connect an AI agent бөлімінде, ал MCP мақаласында толық сипатталған. Скрипттің құны — соңғы сұрақ.
Тікелей транскрипциялау бір сағат аудио үшін $0.60 тұрады, секундына есептеледі ($0.01 минутына), транскрипция үшін ең аз мерзімі 5 минут. Тікелей эфир файлдан қымбат, себебі ол болып жатқан кезде, жұмыс істеген ұзақтыққа транскрипцияланады. Файлдар бір сағатына $0.20 тұрады ($0.0033 минутына; 30 минуттық файл $0.10 тұрады). Бағалар әр тарифте және API арқылы бірдей; аудармалар, қысқаша мазмұндар, спикерлерді атау, трансляция және бөлісу шотқа ешқашан қосылмайды.
Станция күніне сегіз сағат, аптасына бес күн бақыланса, бұл 40 тікелей сағат: аптасына $24, редакция оны қай тілде оқитынына қарамастан.
Бақылау үшін маңызды шектер тарифке қарай өзгереді. Әрқайсысы Pay as you go, Premium, Enterprise реті бойынша берілген:
Жаңа аккаунт $5 тіркелу кредитімен және картасыз басталады, бұл оны сынау үшін сегіз сағаттан астам тікелей бақылауға жетеді. Толық кесте бағалар бетінде.