Tempel stream-nya, bukan halamannya. Audio asli sebuah stasiun berada di alamat yang berakhiran .mp3, .aac atau .m3u8, dan begitu transkripsi langsung memegangnya, tidak ada yang perlu mendengarkan.
Redaksi yang memantau tiga stasiun radio, dua stream televisi, dan beberapa siaran langsung YouTube lebih dulu menghadapi masalah staf sebelum masalah transkripsi. Seseorang harus mendengarkan, dan seseorang harus menekan rekam. Transkripsi langsung dengan stream sebagai sumbernya mengambil alih kedua tugas itu: berikan alamat stream-nya, lalu server akan membukanya, mendekodenya, dan mentranskripsinya selagi tayang, sehingga tidak ada yang harus duduk di meja ketika konferensi pers dimulai lebih awal. Bagian yang sulit, ternyata, adalah menemukan alamatnya.
Transkripsi langsung dapat mengambil audionya dari stream yang ditarik sendiri oleh server: stasiun radio internet, playlist HLS (.m3u8), manifes DASH (.mpd), atau siaran langsung YouTube. Di Dasbor, ini adalah transkripsi langsung baru di Transcriptions → New → Live dengan sumber berupa stream, bukan mikrofon. Alamatnya ditetapkan saat transkripsi dibuat dan tidak pernah berubah, sehingga sebuah monitor cukup disiapkan sekali lalu dimulai kapan pun stasiun itu layak direkam.
Alamatnya harus berupa stream itu sendiri, bukan halaman web yang memutarnya. Halaman stasiun berupa HTML; audio yang diputar berasal dari tempat lain, biasanya server Icecast atau Shoutcast, dan pemutar di halaman itu menemukan alamatnya dengan JavaScript setelah halaman dimuat. Carilah di situs tautan "Listen", "Direct stream" atau "Other players": tautannya berakhiran .mp3, .aac, .m3u, .m3u8 atau .pls. File .pls atau .m3u juga bukan audio. Itu adalah file teks pendek berisi beberapa baris, masing-masing memuat alamat sebuah stream; file itu ada agar pemutar desktop bisa diberi satu tautan saja, dan VocalStack mentranskripsi stream yang disebutkannya. Jika Anda menempelkan halamannya, VocalStack akan meminta halaman itu, melihat HTML yang kembali, dan memberi tahu Anda. Setiap stasiun menyembunyikan stream-nya dengan cara yang sedikit berbeda; kebanyakan menyembunyikannya di balik tombol bertanda "Listen", yang merupakan satu-satunya hal di halaman yang tidak perlu diklik.
Dua jenis tautan langsung ditolak. Tautan ke halaman yang memutar media, seperti Spotify, SoundCloud atau Twitch, ditolak sebelum koneksi dibuat. Stream yang dilindungi hak salin juga tidak didukung: playlist atau manifes yang membutuhkan lisensi DRM akan gagal dengan pesan yang menyebutkannya. Beberapa stream juga menolak permintaan dari luar negara stasiun, sehingga alamat yang bisa diputar di kantor mungkin tidak bisa diputar dari server di luar negeri. Jika stream bisa diputar di browser tetapi tidak di VocalStack, stasiun itu menolak pemutar lain; mintalah alamat kepada stasiun yang mengizinkan aplikasi lain menggunakannya. Kebanyakan menawarkan stream MP3, AAC atau HLS. Setelah Anda memegang alamat yang tepat, pertanyaan berikutnya adalah apakah siaran itu pernah berakhir.
Stream langsung tidak pernah berakhir, sehingga ia bukan file. Perbedaan ini penting terutama untuk YouTube. Siaran langsung YouTube yang sedang tayang masuk ke transkripsi langsung, dan Dasbor mengikutinya selagi tayang. Siaran langsung YouTube yang dijadwalkan tetapi belum dimulai ditampilkan sebagai Not live yet dan bisa direkam setelah tayang. Video yang sudah selesai adalah hal yang berbeda: ia memiliki durasi, sehingga ditranskripsi sebagai file. Tempel tautannya di Transcriptions → New.
Playlist itu sendiri menyatakan jenisnya, dan begitulah pemutar mana pun membedakannya. Playlist HLS yang sudah selesai memuat tag #EXT-X-ENDLIST atau #EXT-X-PLAYLIST-TYPE:VOD; yang langsung tidak memiliki keduanya dan terus bertambah, sehingga pemutar memuatnya ulang setiap beberapa detik untuk mengambil segmen baru. Manifes DASH menyatakan type="dynamic" selama siaran tayang dan type="static" setelah menjadi rekaman. Stream MP3 atau AAC dari server Icecast tidak memiliki durasi sama sekali; ia memang tidak pernah berhenti.
Dari kode, GET /v1/transcriptions/probe?url= memastikan hal ini sebelum apa pun disimpan. Field kind dalam respons bernilai live untuk siaran langsung YouTube yang sedang tayang atau dijadwalkan, stream HTTP tanpa akhir, playlist HLS tanpa akhir, atau manifes DASH dinamis. Nilainya file untuk apa pun yang memiliki akhir, dan unknown jika probe tidak dapat memastikannya. Ketika tautan tidak terbuka sebagai media, ok bernilai false dan problem berisi kalimat yang bisa Anda tampilkan. Probe tidak menyimpan apa pun dan dibatasi 60 panggilan per menit.
Transkripsi file berjalan jauh lebih cepat daripada audionya diputar, sehingga satu jam televisi yang sudah selesai tidak membutuhkan satu jam penuh. Stream langsung ditranskripsi secara real time, tetapi "real time" sudah tertinggal dari siaran, dan penting untuk tahu seberapa jauh. Stream Icecast sampai ke pemutar beberapa detik setelah mikrofon. HLS dan DASH terbagi dalam segmen, dan pemutar tidak akan mulai sebelum memegang dua atau tiga segmen berdurasi sekitar enam detik masing-masing, sehingga stream HLS biasanya tertinggal 10 hingga 30 detik dari siaran sebelum transkripsi menambahkan jedanya sendiri. Baris yang tampak terlambat biasanya merupakan tunda dari stasiun, bukan dari transkriber. Satu stream menghasilkan satu rekaman; sebuah meja redaksi menjalankan beberapa stream, dan semuanya berakhir di tempat yang sama.
Setiap transkripsi langsung masuk ke pustaka Transcriptions bersama semua file. Setiap rekaman disimpan bersama transkripnya, dan setelah kata-katanya final, judul dan ringkasan ditulis untuk rekaman itu, dalam setiap bahasa. Bahasa yang diucapkan dideteksi secara otomatis, dan pembicara boleh berganti bahasa kapan saja. Jika Anda tahu bahasanya, menyebutkannya akan meningkatkan kualitas transkripsi.
Pustaka dapat dicari lintas bahasa: cari di semua transkrip, apa pun bahasanya, dan dapatkan hasilnya dalam bahasa Anda. Reporter yang hanya membaca bahasa Inggris dapat mencari nama seorang menteri dalam acara pagi stasiun radio Rumania, lalu membaca hasilnya dalam bahasa Inggris, masing-masing dengan transkripsi asalnya dan waktu ucapannya. Nama sang menteri akan dieja dengan tiga cara di tiga stasiun; mencarinya dalam bahasa Inggris menghemat waktu membaca ketiganya.
Sebuah transkripsi dapat diterjemahkan ke hingga 10 bahasa sekaligus, sehingga rekaman yang sama bisa dibaca dalam setiap bahasa yang digunakan meja redaksi. Hasil pencarian hanya berguna jika Anda bisa mengutipnya.
Transkrip bukan tembok teks. GET /v1/recordings/{id}/transcript pada API mengembalikan sentences, segments dengan waktu tiap kata, dan speakers, sehingga sebuah kutipan bisa ditempatkan hingga ke detik terhadap rekaman. Dasbor memutar ulang rekaman langsung persis seperti saat ia tiba, lengkap dengan audionya, sehingga sebuah kalimat bisa didengar sebelum dikutip.
Sebelum Anda mempercayai transkrip audio radio apa pun, dari sistem mana pun, ada dua hal yang perlu diketahui. Pengenalan ucapan paling sering tersandung pada nama orang, tempat, dan angka, justru hal-hal yang dicari reporter. Nama yang belum pernah dikenali pengenal akan muncul sebagai kata umum terdekat, dan pencarian dengan ejaan yang benar akan melewatkannya. Carilah kata khas yang diucapkan dalam satu tarikan napas, lalu baca sekitar hasilnya. Dan radio tidak hanya berisi ucapan: musik latar, jingle, serta jeda iklan menghasilkan baris yang tampak seperti kalimat padahal bukan. Periksa audionya sebelum mengutip.
Label pembicara memiliki tiga pengaturan: off, on, atau When Needed, yang menampilkan label begitu pembicara kedua terdengar. Anda bisa memberi nama pembicara dalam sebuah rekaman (PUT /v1/recordings/{id}/speakers/{idx}), dan setelah suara seorang pembicara didaftarkan, rekaman mendatang akan mengenalinya dengan nama. Untuk stasiun yang pembawa acaranya tampil setiap pagi, label tidak lagi berupa "Speaker 2" setelah minggu pertama. Setelah kutipan diperiksa, ia perlu keluar dari redaksi.
Setiap format di tab Export sebuah transkripsi punya fungsi di redaksi. SRT untuk editor video, sehingga klip dari stream membawa subtitle; SRT terjemahan membawanya dalam bahasa lain. Excel untuk peneliti, satu baris per kalimat dengan waktunya, untuk disaring dan dianotasi. PDF untuk editor yang ingin membaca seluruh jam itu di kereta. JSON untuk siapa pun yang menulis alat internal redaksi. Lewat API, ekspornya adalah GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, dengan lang= untuk versi terjemahan. Download audio memberikan rekaman sebagai MP3 untuk paket liputannya sendiri.
Memantau siaran untuk keperluan pelaporan adalah praktik redaksi yang lazim. Menerbitkan ulang klip darinya adalah tindakan yang berbeda. Hal itu diatur oleh fair dealing atau fair use di tempat Anda berada, dan oleh ketentuan stasiun itu sendiri, sehingga aturan redaksi tentang mengutip pesaing juga berlaku untuk audio pesaing. Semua yang disebutkan di atas dapat dilakukan dengan beberapa klik di Dasbor; untuk meja dengan dua puluh stasiun, lebih baik dibuatkan skrip.
Seluruh alurnya ada di API, termasuk dalam setiap paket dan ditagih dengan tarif yang sama seperti di Dasbor. Transkripsi langsung dengan sumber stream dibuat dalam keadaan idle, dimulai oleh rekaman pertamanya, dan dikendalikan lewat HTTP. Karena server yang menarik audionya, memulai rekaman tidak mengembalikan stream untuk Anda publikasikan: tidak ada yang perlu Anda kirim dari sisi Anda.
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 membuat pembuatan yang diulang mengembalikan transkripsi pertama, alih-alih membuat transkripsi kedua. SDK TypeScript dan Python membungkus panggilan yang sama dan diunduh dari area Developers; referensi API memuat setiap rute dan bingkainya.
Agen AI dapat mengerjakan pustaka tanpa kode sama sekali. Server MCP di /v1/mcp memberi agen sekumpulan alat; empat di antaranya relevan di sini. search_transcriptions mencari apa yang diucapkan di seluruh transkripsi akun dalam bahasa apa pun dan mengembalikan baris yang cocok, masing-masing dengan transkripsi tempatnya berada dan waktu ucapannya. get_summary mengembalikan ringkasan sebuah rekaman. transcribe_url dan wait_for_transcription mentranskripsi video yang sudah selesai atau tautan rekaman, lalu menunggu hasilnya. Memulai pemantauan stream langsung tetap dilakukan di Dasbor atau melalui API di atas. Pengaturan untuk Claude Code, Cursor, atau klien Streamable HTTP mana pun ada di Developers → Connect an AI agent; artikel MCP menjelaskan langkah-langkahnya. Berapa biaya menjalankan skrip itu adalah pertanyaan terakhir.
Transkripsi langsung adalah $0.60 per jam audio, ditagih per detik ($0.01 per menit), dengan minimum 5 menit per transkripsi. Siaran langsung lebih mahal daripada file karena ditranskripsi saat berlangsung, selama ia terus berjalan. File dikenai $0.20 per jam ($0.0033 per menit; file 30 menit berharga $0.10). Tarifnya sama di setiap paket dan melalui API, dan terjemahan, ringkasan, penamaan pembicara, siaran, serta berbagi tidak pernah menambah tagihan.
Stasiun yang dipantau delapan jam sehari, lima hari seminggu, adalah 40 jam langsung: $24 seminggu, apa pun bahasa yang digunakan meja redaksi untuk membacanya.
Batas yang penting untuk pemantauan berbeda menurut paket. Setiap batas tercantum dalam urutan Bayar Sesuai Pemakaian, Premium, Enterprise:
Akun baru mendapat kredit pendaftaran $5 tanpa kartu, yang cukup untuk lebih dari delapan jam pemantauan langsung untuk mencobanya. Tabel lengkapnya ada di halaman harga.