Tampal strim, bukan halaman. Audio sebenar sebuah stesen tinggal di alamat yang berakhir dengan .mp3, .aac atau .m3u8, dan apabila transkripsi langsung sudah mempunyainya, tiada siapa perlu mendengar.
Sebuah bilik berita yang memantau tiga stesen radio, dua strim televisyen dan beberapa siaran langsung YouTube menghadapi masalah kakitangan sebelum masalah transkripsi. Seseorang perlu mendengar, dan seseorang perlu menekan rakam. Transkripsi langsung dengan strim sebagai sumbernya mengambil alih kedua-dua tugas ini: berikan alamat strim, dan pelayan akan membukanya, menyahkodnya dan mentranskripsikannya semasa ia disiarkan, supaya tiada siapa perlu berada di meja apabila sidang akhbar bermula awal. Bahagian yang sukar, rupa-rupanya, ialah mencari alamat itu.
Transkripsi langsung boleh mengambil audionya daripada strim yang ditarik sendiri oleh pelayan: stesen radio internet, senarai main HLS (.m3u8), manifest DASH (.mpd), atau siaran langsung YouTube. Dalam Papan Pemuka, ini ialah transkripsi langsung baharu di Transcriptions → New → Live dengan sumbernya ialah strim dan bukan mikrofon. Alamat ditetapkan semasa transkripsi dicipta dan tidak berubah, jadi pemantau hanya perlu disediakan sekali dan dimulakan setiap kali stesen itu wajar dirakam.
Alamat mestilah strim itu sendiri, bukan halaman web yang memainkannya. Halaman stesen ialah HTML; audio yang dimainkannya datang dari tempat lain, biasanya pelayan Icecast atau Shoutcast, dan pemain halaman itu mencari alamat tersebut dengan JavaScript selepas halaman dimuatkan. Cari pada laman itu pautan "Listen", "Direct stream" atau "Other players": ia berakhir dengan .mp3, .aac, .m3u, .m3u8 atau .pls. Fail .pls atau .m3u juga bukan audio. Ia ialah fail teks pendek beberapa baris, setiap baris memberikan alamat satu strim; ia wujud supaya pemain desktop boleh diberikan satu pautan sahaja, dan VocalStack mentranskripsikan strim yang dinamakannya. Jika anda menampal halaman sebaliknya, VocalStack akan meminta halaman itu, nampak HTML dikembalikan dan memberitahu anda. Setiap stesen menyembunyikan strimnya dengan cara yang sedikit berbeza; kebanyakannya menyembunyikannya di sebalik butang bertanda "Listen", iaitu satu-satunya perkara pada halaman yang tidak patut diklik.
Dua jenis pautan ditolak terus. Pautan ke halaman yang memainkan media, seperti Spotify, SoundCloud atau Twitch, ditolak sebelum sebarang sambungan dibuat. Strim yang dilindungi hak cipta juga tidak disokong: senarai main atau manifest yang memerlukan lesen DRM gagal dengan mesej yang menyatakannya. Sesetengah strim juga menolak permintaan dari luar negara stesen, jadi alamat yang berfungsi di pejabat mungkin tidak berfungsi dari pelayan di luar negara. Jika strim dimainkan dalam pelayar tetapi tidak dalam VocalStack, stesen itu sedang menolak pemain lain; mintalah stesen alamat yang dibenarkan digunakan oleh aplikasi lain. Kebanyakan stesen menawarkan strim MP3, AAC atau HLS. Setelah mendapat alamat yang betul, soalan seterusnya ialah sama ada strim itu pernah berakhir.
Strim langsung tidak pernah tamat, jadi ia bukan fail. Perbezaan ini penting terutamanya untuk YouTube. Siaran langsung YouTube yang sedang disiarkan tergolong dalam transkripsi langsung, dan Papan Pemuka mengikutinya semasa ia disiarkan. Siaran langsung YouTube yang dijadualkan tetapi belum bermula dipaparkan sebagai Not live yet dan boleh dirakam sebaik sahaja ia disiarkan. Video yang sudah tamat ialah perkara yang berbeza: ia mempunyai tempoh, maka ia ditranskripsikan sebagai fail: tampal pautannya dalam Transcriptions → New.
Senarai main itu sendiri memberitahu jenisnya, dan itulah cara mana-mana pemain membezakannya. Senarai main HLS yang tamat membawa tag #EXT-X-ENDLIST atau #EXT-X-PLAYLIST-TYPE:VOD; yang langsung tidak mempunyai kedua-duanya dan terus membesar, jadi pemain memuat semula senarai itu setiap beberapa saat untuk mendapatkan segmen baharu. Manifest DASH mengisytiharkan type="dynamic" semasa siaran sedang berjalan dan type="static" apabila ia menjadi rakaman. Strim MP3 atau AAC daripada pelayan Icecast tidak mempunyai tempoh sama sekali; ia tidak pernah berhenti.
Dari kod, GET /v1/transcriptions/probe?url= menyelesaikan perkara ini sebelum apa-apa disimpan. Tindak balas kind ialah live untuk siaran langsung YouTube yang sedang disiarkan atau dijadualkan, strim HTTP tanpa penghujung, senarai main HLS tanpa penghujung, atau manifest DASH dinamik. Ia ialah file untuk apa-apa yang ada penghujung, dan unknown apabila probe tidak dapat menentukannya. Apabila pautan tidak dibuka sebagai media, ok ialah false dan problem ialah ayat yang boleh anda tunjukkan. Probe tidak menyimpan apa-apa dan dihadkan kepada 60 panggilan seminit.
Transkripsi fail berjalan jauh lebih pantas daripada kelajuan audio dimainkan, jadi sejam televisyen yang sudah tamat tidak mengambil masa sejam. Strim langsung ditranskripsikan dalam masa nyata, tetapi "masa nyata" sudah ketinggalan di belakang siaran, dan adalah berbaloi untuk tahu berapa jauh. Strim Icecast sampai ke pemain beberapa saat selepas mikrofon. HLS dan DASH dibahagikan kepada segmen, dan pemain tidak akan bermula sehingga ia memegang dua atau tiga segmen, setiap satu kira-kira enam saat, jadi strim HLS biasanya tertinggal 10 hingga 30 saat di belakang siaran sebelum transkripsi menambah kelewatannya sendiri. Baris yang kelihatan tiba lewat biasanya kelewatan stesen, bukan kelewatan pentranskrip. Satu strim menghasilkan satu rakaman; sebuah meja boleh menjalankan beberapa, dan semuanya berakhir di tempat yang sama.
Setiap transkripsi langsung mendarat dalam perpustakaan Transcriptions bersama setiap fail. Setiap rakaman disimpan bersama transkripnya, dan apabila perkataannya sudah muktamad, tajuk dan ringkasan ditulis untuknya, dalam setiap bahasa. Bahasa yang dituturkan dikesan secara automatik, dan penutur boleh bertukar bahasa pada bila-bila masa. Jika anda tahu bahasanya, menamakannya meningkatkan kualiti transkripsi.
Perpustakaan ini boleh dicari merentas bahasa: cari setiap transkrip, apa pun bahasanya, dan dapatkan hasilnya dalam bahasa anda. Seorang wartawan yang hanya membaca bahasa Inggeris boleh mencari rancangan pagi stesen radio Romania untuk nama seorang menteri dan membaca padanannya dalam bahasa Inggeris, setiap satu dengan transkripsi asalnya dan masa ia diucapkan. Nama menteri itu akan dieja tiga cara merentas tiga stesen; mencarinya dalam bahasa Inggeris menjimatkan bacaan ketiga-tiganya.
Sebuah transkripsi boleh diterjemahkan ke dalam sehingga 10 bahasa sekaligus, supaya rakaman yang sama dibaca dalam setiap bahasa yang digunakan oleh meja itu. Padanan carian hanya berguna jika anda boleh memetiknya.
Transkrip bukan dinding teks. API GET /v1/recordings/{id}/transcript mengembalikan sentences, segments dengan masa perkataan, dan speakers, supaya petikan boleh diletakkan kepada saat berbanding rakaman. Papan Pemuka memainkan semula rakaman langsung tepat seperti yang tiba, dengan audionya, supaya sesuatu ayat boleh didengar sebelum ia dipetik.
Sebelum anda mempercayai mana-mana transkrip audio radio, dari sistem mana pun, dua perkara wajar diketahui. Pengecaman pertuturan paling kerap tersasar pada nama khas, tempat dan angka, iaitulah yang paling dicari oleh wartawan. Nama yang tidak pernah dilihat oleh pengecam akan keluar sebagai perkataan biasa yang paling hampir, dan carian untuk ejaan yang betul akan terlepas. Cari perkataan tersendiri yang disebut dalam nafas yang sama, kemudian baca sekitar padanan itu. Radio juga bukan semuanya pertuturan: jalur muzik, jingle dan slot iklan menghasilkan baris yang kelihatan seperti ayat tetapi bukan. Semak audionya sebelum memetik.
Label penutur mempunyai tiga tetapan: mati, hidup, atau When Needed, yang memaparkan label apabila penutur kedua didengari. Anda boleh menamakan penutur dalam rakaman (PUT /v1/recordings/{id}/speakers/{idx}), dan apabila suara penutur sudah didaftarkan, rakaman akan datang mengenali mereka dengan nama. Untuk stesen yang pembentang kembali setiap pagi, label itu berhenti menjadi "Speaker 2" selepas minggu pertama. Apabila petikan sudah disemak, ia perlu keluar dari bangunan.
Setiap format pada tab Export transkripsi mempunyai tugasnya dalam bilik berita. SRT pergi ke penyunting video, supaya klip dari strim membawa sari kata; SRT yang diterjemah membawanya dalam bahasa lain. Excel pergi ke penyelidik, satu baris setiap ayat dengan masanya, untuk ditapis dan dianotasi. PDF pergi ke penyunting yang mahu membaca keseluruhan sejam itu dalam kereta api. JSON pergi kepada sesiapa yang menulis alat meja itu sendiri. Melalui API, eksport ialah GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, dengan lang= untuk versi terjemahan. Download audio memberikan rakaman sebagai MP3 untuk pakej itu sendiri.
Memantau siaran untuk pelaporan ialah amalan biasa bilik berita. Menyiarkan semula klip daripadanya ialah tindakan yang berbeza. Ia dikawal oleh penggunaan saksama (fair dealing) atau guna saksama di tempat anda, dan oleh terma sendiri stesen, jadi peraturan biasa meja untuk memetik pesaing turut terpakai kepada audio pesaing. Segala yang dinyatakan di atas ialah beberapa klik dalam Papan Pemuka; bagi meja dengan dua puluh stesen, lebih baik ia diautomasikan dengan skrip.
Keseluruhan laluan ini ada dalam API, disertakan dalam setiap pelan dan dibilkan pada kadar yang sama seperti Papan Pemuka. Transkripsi langsung dengan sumber strim dicipta dalam keadaan melahu, dimulakan oleh rakaman pertamanya, dan dikawal melalui HTTP. Oleh kerana pelayan yang menarik audio, memulakan rakaman tidak memulangkan strim untuk anda terbitkan: tiada apa di pihak anda yang menghantar audio.
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 memastikan percubaan semula cipta mengembalikan transkripsi pertama dan bukannya yang kedua. SDK TypeScript dan Python membungkus panggilan yang sama dan dimuat turun dari kawasan Developers; rujukan API memuatkan setiap laluan dan bingkainya.
Ejen AI boleh mengendalikan perpustakaan tanpa sebarang kod. Pelayan MCP di /v1/mcp memberikan ejen itu satu set alat; antaranya, empat yang penting di sini. search_transcriptions mencari apa yang dituturkan merentas transkripsi akaun dalam mana-mana bahasa dan memulangkan baris yang sepadan, setiap satu dengan transkripsi yang mengandunginya dan masa ia diucapkan. get_summary memulangkan ringkasan rakaman. transcribe_url dan wait_for_transcription mentranskripsikan video tamat atau pautan rakaman dan menunggu hasilnya. Memulakan pemantau strim langsung kekal dengan Papan Pemuka atau API di atas. Persediaan untuk Claude Code, Cursor atau mana-mana klien Streamable HTTP terdapat di bawah Developers → Connect an AI agent; artikel MCP menerangkannya langkah demi langkah. Berapa kos skrip itu untuk dijalankan ialah soalan terakhir.
Transkripsi langsung ialah $0.60 sejam audio, dibilkan setiap saat ($0.01 seminit), dengan minimum 5 minit setiap transkripsi. Langsung lebih mahal daripada fail kerana ia ditranskripsikan semasa ia berlaku, selagi ia berjalan. Fail ialah $0.20 sejam ($0.0033 seminit; fail 30 minit berharga $0.10). Kadarnya sama dalam setiap pelan dan melalui API, dan terjemahan, ringkasan, penamaan penutur, penyiaran serta perkongsian tidak pernah menambah bil.
Sebuah stesen yang dipantau lapan jam sehari, lima hari seminggu, ialah 40 jam langsung: $24 seminggu, tanpa mengira berapa bahasa meja itu membacanya.
Had yang penting untuk pemantauan berbeza mengikut pelan. Setiap satu disenaraikan mengikut susunan Bayar Ikut Guna, Premium, Enterprise:
Akaun baharu bermula dengan kredit pendaftaran $5 tanpa kad, yang lebih daripada lapan jam pemantauan langsung untuk mencubanya. Jadual lengkap ada pada halaman harga.