Səhifəni yox, axını yapışdırın. Stansiyanın əsl audiosu .mp3, .aac və ya .m3u8 ilə bitən ünvanda yaşayır və canlı transkripsiya onu götürdükdən sonra heç kimin dinləməsinə ehtiyac qalmır.
Üç radio stansiyasını, iki televiziya yayımını və bir neçə YouTube canlı yayımını izləyən redaksiyanın əvvəlcə transkripsiya problemi yox, kadr problemi var. Kimsə dinləməli, kimsə isə yazını başlatmalıdır. Yayım axını ilə canlı transkripsiya bu iki işi öz üzərinə götürür: axının ünvanını verirsiniz, server onu açır, dekodlayır və efir getdiyi kimi transkripsiya edir, beləliklə mətbuat konfransı tez başlayanda heç kimin masa arxasında olmasına ehtiyac qalmır. Çətin hissə, məlum olduğu kimi, ünvanı tapmaqdır.
Canlı transkripsiya audiosunu serverin özü çəkdiyi axından ala bilər: internet radiosu, HLS pleylisti (.m3u8), DASH manifesti (.mpd) və ya YouTube canlı yayımı. Dashboard-da bu, Transcriptions → New → Live bölməsində mənbəyi mikrofon əvəzinə axın olan yeni canlı transkripsiyadır. Ünvan transkripsiya yaradılarkən təyin olunur və heç vaxt dəyişmir, ona görə monitor bir dəfə qurulur və stansiya dinləməyə dəyəndə işə salınır.
Ünvan veb səhifə yox, axının özü olmalıdır. Stansiyanın səhifəsi HTML-dir; ifa olunan audio isə başqa yerdən gəlir, adətən Icecast və ya Shoutcast serverindən, və səhifənin pleyeri bu ünvanı səhifə yükləndikdən sonra JavaScript ilə tapır. Saytda "Listen", "Direct stream" və ya "Other players" keçidinə baxın: o, .mp3, .aac, .m3u, .m3u8 və ya .pls ilə bitir. .pls və ya .m3u də audio deyil. Bu, bir neçə sətirlik qısa mətn faylıdır, hər sətirdə bir axının ünvanı var; desktop pleyerlərə tək keçid vermək üçün mövcuddur və VocalStack onun adını çəkdiyi axını transkripsiya edir. Əgər səhifəni yapışdırsanız, VocalStack onu sorğulayır, HTML qayıtdığını görür və bunu sizə deyir. Hər stansiya axınını bir az fərqli gizlədir; əksəriyyəti onu "Listen" düyməsinin arxasında saxlayır — səhifədə klik etməyə dəyməyən yeganə şey budur.
İki növ keçid tamamilə rədd edilir. Spotify, SoundCloud və ya Twitch kimi media oynadan səhifələrə keçidlər heç bir qoşulma qurulmadan geri çevrilir. Surəti qorunan axınlar da dəstəklənmir: DRM lisenziyası tələb edən pleylist və ya manifest bunu bildirən mesajla uğursuz olur. Bəzi axınlar stansiyanın ölkəsindən kənar sorğuları da qəbul etmir, buna görə ofisdə işləyən ünvan xaricdəki serverdən oynamaya bilər. Axın brauzerdə oynayır, lakin VocalStack-də yox isə, stansiya digər pleyerləri rədd edir; tətbiqlərin istifadə etməsinə icazə verilən ünvan istəyin. Əksəriyyəti MP3, AAC və ya HLS axını təklif edir. Doğru ünvanı tapdıqdan sonra növbəti sual budur: o heç vaxt bitirmi?
Canlı axın heç vaxt bitmir, ona görə o fayl deyil. Bu fərq xüsusilə YouTube üçün önəmlidir. Efirdə olan YouTube canlı yayımı canlı transkripsiyaya aiddir və Dashboard onu efir getdiyi kimi izləyir. Planlaşdırılmış, lakin hələ başlamamış YouTube canlısı Not live yet kimi göstərilir və efirə çıxanda yazıla bilər. Bitmiş video isə başqa şeydir: uzunluğu var, ona görə fayl kimi transkripsiya olunur — linki Transcriptions → New bölməsinə yapışdırın.
Pleylistin özü bunun nə olduğunu deyir və hər pleyerin fərqi bilməsi də elə bu yolla olur. Bitmiş HLS pleylistində #EXT-X-ENDLIST teqi və ya #EXT-X-PLAYLIST-TYPE:VOD olur; canlı pleylistdə isə heç biri yoxdur və o böyüyür, ona görə pleyer yeni seqmentlər üçün onu hər bir neçə saniyədən bir yenidən yükləyir. DASH manifesti yayım efirdə olarkən type="dynamic", qeyd olunduqdan sonra isə type="static" elan edir. Icecast serverindən gələn MP3 və ya AAC axının heç bir uzunluğu yoxdur; sadəcə heç vaxt dayanmır.
Kodda GET /v1/transcriptions/probe?url= heç nə saxlanmamışdan əvvəl bunu həll edir. Cavabdakı kind YouTube canlısı efirdə və ya planlaşdırılmış olduqda, sonsuz HTTP axınında, sonu olmayan HLS pleylistində və ya dinamik DASH manifestində live olur. Sonu olan hər şey üçün file olur, probe anlaya bilmədikdə isə unknown. Keçid media kimi açılmadıqda ok false olur və problem göstərə biləcəyiniz bir cümlədir. Probe heç nə saxlamır və dəqiqədə 60 çağırışla məhdudlaşdırılıb.
Fayl transkripsiyaları səsin ifa olunma sürətindən dəfələrlə tez işləyir, ona görə bitmiş bir saatlıq televiziya yayımı bir saat çəkmir. Canlı axın real vaxt rejimində transkripsiya olunur, lakin "real vaxt" yayımın arxasında qalır və bunun nə qədər olduğunu bilmək dəyər. Icecast axını mikrofondan bir neçə saniyə sonra pleyerə çatır. HLS və DASH seqmentləşdirilmişdir və pleyer hər biri təxminən altı saniyəlik iki-üç seqment toplamadan başlamır, ona görə HLS axını transkripsiyanın öz gecikməsini əlavə etməzdən əvvəl adətən yayımın 10-30 saniyə arxasında olur. Gec gələn sətir çox vaxt transkriptorun deyil, stansiyanın gecikməsidir. Bir axın bir qeyd yaradır; masa bir neçəsini işlədir və hamısı eyni yerdə toplanır.
Hər canlı transkripsiya faylların yanında Transkripsiyalar kitabxanasına düşür. Hər qeyd transkriptlə birlikdə saxlanılır və sözlər son olduqdan sonra ona bütün dillərdə başlıq və xülasə yazılır. Danışıq dili avtomatik aşkarlanır və danışanlar istənilən vaxt dil dəyişə bilər. Dili bildiyiniz yerdə onu adlandırmaq transkripsiyanın keyfiyyətini artırır.
Kitabxana dillər arasında axtarışa açıqdır: hər transkriptdə, dilindən asılı olmayaraq axtarın və nəticələri öz dilinizdə alın. Yalnız ingilis dilini oxuyan müxbir Rumıniya stansiyasının səhər proqramında naziri adına görə axtara bilər və nəticələri ingilis dilində oxuya bilər, hər biri hansı transkripsiyadan və deyilən vaxtla birlikdə. Nazirin adı üç stansiyada üç cür yazılacaq; ingilis dilində axtarış üçünü də oxumağa qənaət edir.
Transkripsiya eyni anda 10 dilə tərcümə oluna bilər, beləliklə eyni qeyd masanın işlətdiyi hər dildə oxunur. Axtarış nəticəsi yalnız onu sitat gətirə bildiyiniz zaman faydalıdır.
Transkript divar mətni deyil. API-nin GET /v1/recordings/{id}/transcript çağırışı sentences, söz vaxtları olan segments və speakers qaytarır, beləliklə sitat qeydə görə saniyəsinə qədər yerləşdirilə bilər. Dashboard canlı qeydi gəldiyi kimi, audiosu ilə birlikdə təkrar oynadır, beləliklə sitat ediləndən əvvəl cümləni eşitmək olar.
Radio audiosunun hər hansı sistemdən olan transkriptinə etibar etməzdən əvvəl iki şeyi bilmək dəyər. Nitq tanıma ən çox xüsusi adlarda, yer adlarında və rəqəmlərdə çaşır; məhz müxbirin axtardığı şeylər də bunlardır. Tanıyıcının heç görmədiyi ad ən yaxın adi sözə çevrilir və adın düzgün yazılışı ilə axtarış onu qaçırır. Onun əvəzinə eyni nəfəsdə deyilən fərqli bir sözü axtarın, sonra nəticənin ətrafını oxuyun. Və radio yalnız nitq deyil: musiqi fonu, cinglələr və reklam fasilələri cümlə kimi görünən, lakin olmayan sətirlər yaradır. Sitat gətirməzdən əvvəl audionu yoxlayın.
Danışan etiketlərinin üç ayarı var: söndürülüb, yandırılıb və ya When Needed, ikinci danışan eşidiləndə etiketləri göstərir. Qeyddə danışanın adını yaza bilərsiniz (PUT /v1/recordings/{id}/speakers/{idx}) və danışanın səsi qeydə alındıqdan sonra gələcək qeydlər onu adına görə tanıyır. Hər səhər qayıdan prezenterlər üçün stansiya ilk həftədən sonra "Speaker 2" etiketini itirir. Sitat yoxlanıldıqdan sonra isə o, binanı tərk etməlidir.
Transkripsiyanın İxrac tabındakı hər formatın redaksiyada öz işi var. SRT video redaktoruna gedir, beləliklə yayımdan çıxarılan klip subtitrlərlə gəlir; tərcümə olunmuş SRT onları başqa dildə daşıyır. Excel araşdırmaçıya gedir, hər cümlə üçün bir sətir və vaxtla, süzmək və şərh yazmaq üçün. PDF bütün saatı qatarda oxumaq istəyən redaktora gedir. JSON masanın öz alətlərini yazan adama gedir. API vasitəsilə ixrac GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf olur, tərcümə versiyası üçün lang= ilə. Download audio qeydi paket üçün MP3 kimi verir.
Yayımı hesabat üçün izləmək adi redaksiya təcrübəsidir. Ondan klip yenidən yayımlamaq isə başqa bir işdir. Bu, olduğunuz yerdəki ədalətli istifadə və ya ədalətli davranış qaydaları ilə və stansiyanın öz şərtləri ilə tənzimlənir, ona görə masanın rəqibi sitat gətirmə qaydaları rəqibin audiosuna da aiddir. Yuxarıdakıların hamısı Dashboard-da bir neçə kliklik işdir; iyirmi stansiyası olan masa üçün isə skriptləşdirmək daha yaxşıdır.
Bütün yol API-dədir, hər planda daxildir və Dashboard ilə eyni tarifdə ödənilir. Axını olan canlı transkripsiya boş yaradılır, ilk qeyd tərəfindən işə salınır və HTTP üzərindən idarə olunur. Audionu server çəkdiyi üçün qeydi başlatdıqda sizə yayımlamaq üçün axın qaytarılmır: sizin tərəfinizdə audio göndərən heç nə yoxdur.
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 təkrar yaratma sorğusunun ikinci transkripsiya yox, birincini qaytarmasını təmin edir. TypeScript və Python SDK-ları eyni çağırışları əhatə edir və Developers sahəsindən yüklənir; API istinadında bütün marşrutlar və onların çərçivələri var.
AI agent kodsuz da kitabxanada işləyə bilər. /v1/mcp ünvanındakı MCP serveri agentə bir sıra alət verir; onlardan dördü burada önəmlidir. search_transcriptions hesabın bütün transkripsiyalarında, istənilən dildə deyilənləri axtarır və uyğun sətirləri, hər birini olduğu transkripsiya və deyilən vaxtla birlikdə qaytarır. get_summary qeydin xülasəsini qaytarır. transcribe_url və wait_for_transcription bitmiş videonu və ya qeydin keçidini transkripsiya edir və nəticəni gözləyir. Canlı axın monitorunun işə salınması yuxarıdakı kimi Dashboard və ya API-də qalır. Claude Code, Cursor və ya istənilən Streamable HTTP klienti üçün quraşdırma Developers → Connect an AI agent altındadır; MCP məqaləsi onu addım-addım izah edir. Skriptin işə salınmasının nəyə başa gəldiyi isə sonuncu sualdır.
Canlı transkripsiya audionun hər saatı üçün $0.60-dır, saniyə ilə hesablanır ($0.01 dəqiqədə), hər transkripsiya üçün 5 dəqiqəlik minimum ilə. Canlı fayldan daha bahalıdır, çünki o, baş verdiyi kimi, işlədiyi müddətcə transkripsiya olunur. Fayllar saatda $0.20-dir ($0.0033 dəqiqədə; 30 dəqiqəlik fayl $0.10 olur). Tariflər bütün planlarda və API vasitəsilə eynidir; tərcümələr, xülasələr, danışanların adlandırılması, yayım və paylaşım isə heç vaxt hesaba əlavə olunmur.
Səkkiz saat gündə, beş gün həftədə izlənən stansiya 40 canlı saatdır: həftədə $24, masanın oxuduğu dillərdən asılı olmayaraq.
Monitorinq üçün önəmli olan limitlər plana görə dəyişir. Hər biri İstifadə etdikcə ödə, Premium, Enterprise sırası ilə verilir:
Yeni hesab $5 qeydiyyat krediti ilə başlayır və kart tələb etmir; bu, sınamaq üçün səkkiz saatdan çox canlı monitorinqdir. Tam cədvəl qiymət səhifəsindədir.