Залепете го стримот, не страницата. Реалниот звук на една станица е на адреса што завршува на .mp3, .aac или .m3u8, а откако транскрипцијата во живо ќе го има, никој не мора да слуша.
Редакција што следи три радио станици, два телевизиски стриму и неколку YouTube преноси прво има кадровски проблем, а дури потоа транскрипциски. Некој мора да слуша, а некој мора да притисне снимање. Транскрипцијата во живо со стрим како извор ги презема и двете работи: дајте ѝ ја адресата на стримот, а серверот го отвора, го декодира и го транскрибира додека се емитува, па никој не мора да седи за биро кога ќе почне неочекувана пресконференција. Тешкиот дел, како што излегува, е да се најде адресата.
Транскрипцијата во живо може да го земе звукот од стрим што серверот сам го повлекува: интернет радио, HLS плејлиста (.m3u8), DASH манифест (.mpd) или YouTube live. Во контролната табла, тоа е нова транскрипција во живо на Transcriptions → New → Live чиј извор е стрим, а не микрофон. Адресата се поставува при создавањето и никогаш не се менува, па еден монитор се поставува еднаш и се стартува кога станицата ќе вреди да се сними.
Адресата мора да биде самиот стрим, а не веб-страницата што го пушта. Страницата на станицата е HTML; звукот што го пушта доаѓа од друго место, најчесто од Icecast или Shoutcast сервер, а плејерот на страницата ја наоѓа адресата со JavaScript откако ќе се вчита. Барајте на сајтот линк „Listen“, „Direct stream“ или „Other players“: тој завршува на .mp3, .aac, .m3u, .m3u8 или .pls. Ниту .pls ниту .m3u не е звук. Тоа е краток текстуален фајл од неколку линии, секоја со адреса на стрим; постои за desktop плејерите да добијат една единствена врска, а VocalStack ја транскрибира станицата што ја именува. Ако залепите страница, VocalStack ја бара, гледа HTML во одговорот и тоа ви го кажува. Секоја станица го крие стримот малку поинаку; повеќето го кријат зад копче со натпис „Listen“, а тоа е единственото на страницата што не вреди да се притисне.
Две видови врски се одбиваат веднаш. Врски кон страници што пуштаат медиуми, како Spotify, SoundCloud или Twitch, се отфрлаат пред да се воспостави врска. Заштитени стримови исто така не се поддржани: плејлиста или манифест што бара DRM лиценца не успева, со порака што го кажува тоа. Некои стримови пак одбиваат барања однадвор од земјата на станицата, па адреса што во канцеларијата работи може да не работи од сервер во странство. Ако стримот се пушта во прелистувач, а не во VocalStack, станицата ги одбива другите плејери; побарајте од неа адреса што другите апликации смеат да ја користат. Повеќето нудат MP3, AAC или HLS поток. Кога ќе ја имате вистинската адреса, следното прашање е дали воопшто некогаш завршува.
Живиот стрим никогаш не завршува, па не е датотека. Разликата е особено важна за YouTube. YouTube live што е во етер припаѓа во транскрипција во живо, а контролната табла го следи додека се емитува. YouTube live што е закажан, но уште не почнал, се прикажува како Not live yet и може да се сними откако ќе почне. Завршено видео е нешто друго: има должина, па се транскрибира како датотека; залепете ја врската во Transcriptions → New.
Самата плејлиста ја кажува разликата, и така ја открива секој плејер. Завршена HLS плејлиста има ознака #EXT-X-ENDLIST или #EXT-X-PLAYLIST-TYPE:VOD; жива нема ниту едното и расте, па плејерот ја вчитува повторно на секои неколку секунди за нови сегменти. DASH манифест има type="dynamic" додека емитувањето е во тек и type="static" кога е снимка. MP3 или AAC поток од Icecast сервер нема никаква должина; едноставно никогаш не застанува.
Од код, GET /v1/transcriptions/probe?url= ова го решава пред што било да се зачува. kind во одговорот е live за YouTube live што е во етер или закажан, за бескраен HTTP поток, за HLS плејлиста без крај или за динамичен DASH манифест. Е file за сè што има крај, а unknown кога пробата не можела да одлучи. Кога врската не се отворила како медиум, ok е false, а problem е реченица што можете да ја прикажете. Пробата ништо не чува и е ограничена на 60 повици во минута.
Транскрипциите на датотеки се извршуваат многу пати побрзо од времето на пуштање, па завршен час телевизија не трае час. Живиот стрим се транскрибира во реално време, но „реално време“ сепак значи задоцнување во однос на емитувањето, и вреди да се знае колку е. Icecast стрим стигнува до плејерот неколку секунди по микрофонот. HLS и DASH се сегментирани, а плејерот нема да почне додека не држи два или три сегменти од околу шест секунди, па HLS стрим обично е 10 до 30 секунди зад емитувањето, пред транскрипцијата да додаде свое задоцнување. Линија што изгледа дека стигнува доцна обично е задоцнувањето на станицата, а не на транскрипторот. Еден стрим дава една снимка; една редакција води неколку, и сите завршуваат на исто место.
Секоја транскрипција во живо се појавува во библиотеката на Transcriptions, покрај секоја датотека. Секоја снимка се чува со својот транскрипт, а откако зборовите ќе бидат конечни, за неа се пишуваат наслов и резиме на секој јазик. Јазикот на говорот се открива автоматски, а говорниците можат да менуваат јазик во секое време. Кога го знаете јазикот, наведувањето му го подобрува квалитетот на транскрипцијата.
Библиотеката се пребарува низ јазици: барајте во сите транскрипти, без оглед на јазикот, и резултатите добивате на вашиот. Известувач што чита само англиски може да ја пребара јутарната емисија на романската станица за име на министер и да ги чита погодоците на англиски, секој со транскрипцијата од која потекнува и времето кога било кажано. Името на министерот ќе биде напишано на три начини на три станици; ако го барате на англиски, не мора да ги читате сите три.
Транскрипцијата може да се преведе најмногу на 10 јазици истовремено, па истата снимка се чита на сите јазици со кои работи редакцијата. Погодокот при пребарување е корисен само ако можете да го citирате.
Транскриптот не е ѕид од текст. API-то GET /v1/recordings/{id}/transcript враќа sentences, segments со временски ознаки на зборовите и speakers, па цитатот се става до секунда на снимката. Контролната табла ја пушта живата снимка онака како што пристигнала, со нејзиниот звук, па реченицата може да се слушне пред да се цитира.
Пред да му верувате на транскрипт од радио аудио, од кој било систем, вреди да знаете две работи. Препознавањето говор најмногу греши кај лични имиња, места и бројки, а токму тоа редакторот го бара. Име што препознавачот никогаш не го видел се претвора во најблискиот вообичаен збор, па пребарувањето на точниот правопис го промашува. Пребарајте за посебен збор кажан во истиот здив, па прочитајте околу погодокот. И радиото не е само говор: музички подлоги, џинглови и рекламни блокови даваат редови што изгледаат како реченици, а не се. Проверете го звукот пред да цитирате.
Ознаките на говорниците имаат три поставки: off, on или When Needed, кој ги прикажува откако ќе се чуе втор говорник. Можете да именувате говорник во снимка (PUT /v1/recordings/{id}/speakers/{idx}), а откако ќе се регистрира гласот на говорникот, идните снимки го препознаваат по име. За станица чии презентери се враќаат секое утро, ознаките престануваат да бидат „Speaker 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 area; API референцата ги содржи сите рути и нивните формати на пораки.
AI агент може да работи со библиотеката без никаков код. MCP серверот на /v1/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 неделно, на кој било јазик на кој ја чита редакцијата.
Ограничувањата важни за следење зависат од планот. Секое е наведено по редослед Плаќање според користење, Premium, Enterprise:
Новата сметка почнува со $5 кредит за регистрација и без картичка, што е повеќе од осум часа следење во живо за да се проба. Целата табела е на страницата со цени.