Տեղադրեք հոսքը, ոչ թե էջը։ Կայանի իրական աուդիոն գտնվում է «.mp3», «.aac» կամ «.m3u8» վերջավորությամբ հասցեում, և երբ ուղիղ տառադարձումն այն ստանա, ոչ ոք պետք չէ լսի։
Լրատվական խմբագրությունը, որը վերահսկում է երեք ռադիոկայան, երկու հեռուստահոսք և մի քանի YouTube ուղիղ եթեր, նախ ունի անձնակազմի խնդիր, և միայն դրանից հետո՝ տառադարձման։ Ինչ-որ մեկը պետք է լսի, և ինչ-որ մեկը պետք է սեղմի ձայնագրման կոճակը։ Հոսք աղբյուր ունեցող ուղիղ տառադարձումը ստանձնում է երկու գործն էլ․ տվեք հոսքի հասցեն, և սերվերը բացում է այն, վերծանում և տառադարձում եթերի ընթացքում, այնպես որ ոչ ոք պետք չէ նստած լինի գրասեղանի մոտ, երբ մամուլի ասուլիսը վաղ է սկսվում։ Դժվար մասը, ինչպես պարզվում է, հասցեն գտնելն է։
Ուղիղ տառադարձումը կարող է աուդիոն վերցնել այն հոսքից, որը սերվերն ինքն է քաշում՝ ինտերնետ ռադիոկայան, HLS playlist (.m3u8), DASH manifest (.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-ը, մերժվում են, նախքան որևէ կապ հաստատվի։ Պաշտպանված պատճենումից պաշտպանված հոսքերը նույնպես չեն աջակցվում․ playlist կամ manifest, որին պետք է DRM լիցենզիա, ձախողվում է՝ հաղորդագրությամբ, որ դա ասում է։ Ոմանք նաև մերժում են հարցումները կայանի երկրից դուրս․ այսպիսով հասցեն, որը գրասենյակում նվագում է, կարող է չնվագել արտասահմանում գտնվող սերվերից։ Եթե հոսքը բրաուզերում նվագում է, բայց VocalStack-ում՝ ոչ, ապա կայանը մերժում է այլ նվագարկիչները․ խնդրեք կայանից այն հասցեն, որ այլ հավելվածներին թույլատրված է օգտագործել։ Մեծամասնությունը առաջարկում է MP3, AAC կամ HLS հոսք։ Երբ ունենաք ճիշտ հասցեն, հաջորդ հարցը այն է, արդյոք այն երբևէ ավարտվում է։
Ուղիղ հոսքը երբեք չի ավարտվում, ուստի այն ֆայլ չէ։ Այս տարբերակումը կարևոր է հատկապես YouTube-ի համար։ Եթերում գտնվող YouTube ուղիղ եթերը պատկանում է ուղիղ տառադարձմանը, և կառավարման վահանակը հետևում է դրան, երբ այն եթերում է։ Պլանավորված, բայց դեռ չսկսված YouTube ուղիղ եթերը ցուցադրվում է որպես Not live yet և կարող է ձայնագրվել, երբ եթերում լինի։ Ավարտված տեսանյութը այլ բան է․ այն ունի տևողություն, ուստի տառադարձվում է որպես ֆայլ․ տեղադրեք հղումը Transcriptions → New-ում։
Playlist-ն ինքն է ասում, թե որն է, և այսպես է յուրաքանչյուր նվագարկիչ տարբերում դրանք։ Ավարտված HLS playlist-ը պարունակում է #EXT-X-ENDLIST պիտակ կամ #EXT-X-PLAYLIST-TYPE:VOD․ ուղիղը չունի ոչ մեկը և շարունակում է աճել, ուստի նվագարկիչը յուրաքանչյուր մի քանի վայրկյանը մեկ նորից է բեռնում այն նոր հատվածների համար։ DASH manifest-ը հայտարարում է type="dynamic", մինչ հեռարձակումն եթերում է, և type="static", երբ այն արդեն ձայնագրություն է։ MP3 կամ AAC հոսքը Icecast սերվերից երկարություն ընդհանրապես չունի․ այն պարզապես երբեք չի դադարում։
Կոդից՝ GET /v1/transcriptions/probe?url= հարցումը սա լուծում է ամեն ինչ, նախքան որևէ բան պահվի։ Պատասխանի kind-ը live է YouTube ուղիղ եթերի համար, որ եթերում է կամ պլանավորված, անվերջ HTTP հոսքի, առանց վերջի HLS playlist-ի կամ dynamic DASH manifest-ի համար։ Այն file է ամեն բանի համար, որ ունի վերջ, և unknown, երբ probe-ը չի կարողացել որոշել։ Երբ հղումը որպես մեդիա չի բացվել, ok-ը false է, իսկ problem-ը նախադասություն է, որ կարող եք ցուցադրել։ Probe-ը ոչինչ չի պահում և սահմանափակված է րոպեում 60 կանչով։
Ֆայլի տառադարձումը շատ անգամ ավելի արագ է, քան աուդիոն է նվագում, ուստի ավարտված ժամ հեռուստատեսությունը չի տևում մեկ ժամ։ Ուղիղ հոսքը տառադարձվում է իրական ժամանակում, բայց «իրական ժամանակը» արդեն հետ է մնում հեռարձակումից, և արժե իմանալ, թե որքանով։ Icecast հոսքը հասնում է նվագարկչին մի քանի վայրկյան միկրոֆոնից հետո։ HLS-ը և DASH-ը հատվածավորված են, և նվագարկիչը չի սկսում, մինչև չունենա երկու-երեք հատված, յուրաքանչյուրը մոտ վեց վայրկյան, ուստի HLS հոսքը սովորաբար 10-ից 30 վայրկյան հետ է մնում հեռարձակումից, նախքան տառադարձումն ավելացնի իր սեփական ուշացումը։ Տողը, որ թվում է ուշ է գալիս, սովորաբար կայանի ուշացումն է, ոչ թե տառադարձողինը։ Մեկ հոսքը ստեղծում է մեկ ձայնագրություն․ խմբագրությունը գործարկում է մի քանիսը, և բոլորն էլ հայտնվում են նույն տեղում։
Յուրաքանչյուր ուղիղ տառադարձում հայտնվում է Transcriptions գրադարանում՝ բոլոր ֆայլերի կողքին։ Յուրաքանչյուր ձայնագրություն պահվում է իր տառադարձման հետ, և երբ բառերը վերջնական են, դրա համար գրվում են վերնագիր և ամփոփում՝ բոլոր լեզուներով։ Խոսքի լեզուն ավտոմատ է որոշվում, և խոսնակները կարող են ցանկացած պահի փոխել լեզուն։ Երբ գիտեք լեզուն, նշելը բարելավում է տառադարձման որակը։
Գրադարանում որոնումը անցնում է լեզուների սահմանը․ փնտրեք յուրաքանչյուր տառադարձում, անկախ նրա լեզվից, և ստացեք արդյունքները ձեր լեզվով։ Միայն անգլերեն կարդացող լրագրողը կարող է փնտրել ռումինական կայանի առավոտյան ծրագիրը նախարարի անունով և կարդալ գտածները անգլերեն, յուրաքանչյուրը իր տառադարձման և ասված ժամանակի հետ միասին։ Նախարարի անունը երեք կայանում երեք տարբեր կերպ կգրվի․ անգլերեն որոնելը խնայում է երեքն էլ կարդալու ժամանակը։
Տառադարձումը կարող է թարգմանվել մինչև 10 լեզվով միաժամանակ, այնպես որ նույն ձայնագրությունը կարդացվում է բոլոր լեզուներով, որոնցով աշխատում է խմբագրությունը։ Որոնման արդյունքը օգտակար է միայն, եթե կարող եք այն մեջբերել։
Տառադարձումը անընդհատ տեքստի պատ չէ։ 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՝ հենց փաթեթի համար։
Հեռարձակումը մոնիտորինգ անելը լրագրության սովորական պրակտիկա է։ Դրա կտորը վերահրապարակելը այլ գործ է։ Այն կարգավորվում է ճիշտ օգտագործման (fair dealing կամ fair use) կանոններով այնտեղ, որտեղ դուք եք, և կայանի սեփական պայմաններով, ուստի խմբագրության սովորական կանոնները մրցակցին մեջբերելու մասին վերաբերում են նաև մրցակցի աուդիոյին։ Վերևում նկարագրված ամեն ինչ կառավարման վահանակում մի քանի սեղմում է․ քսան կայան ունեցող խմբագրության համար այն ավելի լավ է գրել սկրիպտով։
Ամբողջ ճանապարհը 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 reference-ում կան բոլոր երթուղիները և դրանց ֆրեյմները։
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, անկախ նրանից, թե խմբագրությունը քանի լեզվով է կարդում այն։
Մոնիտորինգի համար կարևոր սահմանաչափերը փաթեթից կախված են։ Յուրաքանչյուրը թվարկված է Pay as you go, Premium, Enterprise հերթականությամբ՝
Նոր հաշիվը սկսվում է $5 գրանցման կրեդիտով առանց քարտի, ինչը բավարար է ութ ժամից ավելի ուղիղ մոնիտորինգ փորձելու համար։ Ամբողջական աղյուսակը գտնվում է գների էջում։