Pega o fluxo, non a páxina. O audio real dunha emisora vive nun enderezo que remata en .mp3, .aac ou .m3u8, e, unha vez que unha transcrición en directo o ten, ninguén precisa estar escoitando.
Unha redacción que controla tres emisoras de radio, dous canais de televisión en directo e un puñado de directos en YouTube ten primeiro un problema de persoal e só despois un problema de transcrición. Alguén ten que escoitar, e alguén ten que premer gravar. Unha transcrición en directo cun fluxo como fonte asume as dúas tarefas: dálle o enderezo do fluxo, e o servidor ábreo, decódao e transcríbeo mentres emite, de xeito que ninguén teña que estar diante dun ordenador cando unha rolda de prensa comeza cedo. A parte difícil, resulta, é atopar o enderezo.
Unha transcrición en directo pode tomar o audio dun fluxo que o servidor extrae por si mesmo: unha radio por internet, unha lista de reprodución HLS (.m3u8), un manifesto DASH (.mpd) ou un directo de YouTube. No panel, isto é unha nova transcrición en directo en Transcriptions → New → Live cuxa fonte é un fluxo en lugar do micrófono. O enderezo fíxase ao crear a transcrición e non cambia nunca, así que unha monitorización configúrase unha vez e iníciase cada vez que a emisora mereza ser gravada.
O enderezo ten que ser o propio fluxo, non a páxina web que o reproduce. A páxina dunha emisora é HTML; o audio que reproduce vén doutro lugar, normalmente dun servidor Icecast ou Shoutcast, e o reprodutor da páxina atópao con JavaScript despois de cargarse. Busca no sitio unha ligazón «Listen», «Direct stream» ou «Other players»: remata en .mp3, .aac, .m3u, .m3u8 ou .pls. Un .pls ou un .m3u tampouco é audio. É un ficheiro de texto curto de poucas liñas, cada unha con o enderezo dun fluxo; existe para que os reprodutores de escritorio poidan recibir unha única ligazón, e VocalStack transcribe o fluxo que nomea. Se pegas a páxina, VocalStack pide a páxina, ve que volve HTML e avísache. Cada emisora oculta o seu fluxo dun xeito algo distinto; a maioría oculta o fluxo tras un botón marcado «Listen», que é a única cousa da páxina que non merece a pena premer.
Hai dous tipos de ligazón que se rexeitan de inmediato. As ligazóns a páxinas que reproducen medios, como Spotify, SoundCloud ou Twitch, recházanse antes de conectar nada. Os fluxos protexidos contra copia tampouco se admiten: unha lista ou un manifesto que precise unha licenza DRM falla cunha mensaxe que o di. Algúns fluxos rexeitan tamén as peticións desde fóra do país da emisora, así que un enderezo que se reproduce na oficina pode non reproducirse desde un servidor no estranxeiro. Se un fluxo se reproduce nun navegador pero non en VocalStack, a emisora está rexeitando outros reprodutores; pídelle un enderezo que outras aplicacións poidan usar. A maioría ofrece un fluxo MP3, AAC ou HLS. Unha vez teñas o enderezo correcto, a seguinte pregunta é se algunha vez remata.
Un fluxo en directo nunca remata, así que non é un ficheiro. A distinción importa sobre todo con YouTube. Un directo de YouTube que está en antena pertence a unha transcrición en directo, e o panel sígueo mentres emite. Un directo de YouTube programado que aínda non comezou aparece como Not live yet e pode gravarse cando estea en antena. Un vídeo finalizado é outra cousa: ten duración, así que se transcribe como ficheiro: pega a ligazón en Transcriptions → New.
A propia lista de reprodución di cal é, e así é como calquera reprodutor distingue as dúas cousas. Unha lista HLS finalizada leva a etiqueta #EXT-X-ENDLIST ou #EXT-X-PLAYLIST-TYPE:VOD; unha en directo non ten ningunha das dúas e segue crecendo, así que o reprodutor a volve pedir cada poucos segundos para obter novos segmentos. Un manifesto DASH declara type="dynamic" mentres a emisión está en antena e type="static" cando é unha gravación. Un fluxo MP3 ou AAC dun servidor Icecast non ten duración en absoluto; simplemente nunca se detén.
Desde o código, GET /v1/transcriptions/probe?url= resolve isto antes de gardar nada. O campo kind da resposta é live para un directo de YouTube en antena ou programado, un fluxo HTTP sen fin, unha lista HLS sen final ou un manifesto DASH dinámico. É file para o que ten final, e unknown cando a sonda non o pode determinar. Cando a ligazón non se abriu como medio, ok é false e problem é unha frase que podes mostrar. A sonda non garda nada e está limitada a 60 chamadas por minuto.
Os ficheiros transcríbense moitas veces máis rápido do que se reproduce o audio, así que unha hora finalizada de televisión non leva unha hora. Un fluxo en directo transcríbese en tempo real, pero o «tempo real» xa vai por detrás da emisión, e paga a pena saber canto. Un fluxo Icecast chega a un reprodutor uns segundos despois do micrófono. HLS e DASH van por segmentos, e un reprodutor non arranca ata ter dous ou tres segmentos de uns seis segundos cada un, así que un fluxo HLS vai por regra xeral de 10 a 30 segundos por detrás da emisión, antes de que a transcrición engada o seu propio atraso. Unha liña que parece chegar tarde adoita ser o atraso da emisora, non do transcritor. Cada fluxo fai unha gravación; unha redacción leva varias, e acaban todas no mesmo sitio.
Cada transcrición en directo cae na biblioteca de Transcriptions xunto a cada ficheiro. Cada gravación consérvase coa súa transcrición e, unha vez que as palabras son definitivas, escríbese un título e un resumo para ela, en todos os idiomas. O idioma falado detéctase automaticamente, e os falantes poden cambiar de idioma en calquera momento. Cando sabes en que idioma se fala, indicalo mellora a calidade da transcrición.
A biblioteca é buscable entre idiomas: busca en todas as transcricións, sexa cal sexa o seu idioma, e recibe os resultados no teu. Unha persoa redactora que só le inglés pode buscar o programa da mañá dunha emisora romanesa polo nome dun ministro e ler os resultados en inglés, cada un coa transcrición de onde procede e o momento en que se dixo. O nome do ministro escribirase de tres xeitos en tres emisoras; buscalo en inglés aforra ler as tres versións.
Unha transcrición pode traducirse a até 10 idiomas ao mesmo tempo, así que a mesma gravación se le en todos os idiomas nos que traballa a redacción. Un resultado de busca só é útil se se pode citar.
Unha transcrición non é un muro de texto. GET /v1/recordings/{id}/transcript da API devolve sentences, segments con marcas de tempo por palabra e speakers, así que unha cita pódese situar ao segundo fronte á gravación. O panel reproduce unha gravación en directo tal como chegou, co seu audio, para que unha frase se poida escoitar antes de citala.
Antes de fiarte de calquera transcrición de audio de radio, de calquera sistema, hai dúas cousas que paga a pena saber. O recoñecemento da fala tropeza sobre todo con nomes propios, lugares e cifras, que son exactamente o que busca unha redactora. Un nome que o recoñecedor nunca viu sae como a palabra común máis próxima, e unha busca pola grafía correcta non o atopa. Busca nolo outra palabra distintiva dita no mesmo alento e le o contexto ao redor do resultado. E a radio non é só fala: as camas musicais, as cabeceiras e os intervalos publicitarios producen liñas que parecen frases sen selo. Escoita o audio antes de citar.
Os rótulos de falante teñen tres axustes: desactivados, activados ou When Needed, que mostra as etiquetas cando se oe un segundo falante. Podes nomear un falante nunha gravación (PUT /v1/recordings/{id}/speakers/{idx}), e unha vez que a voz dun falante está rexistrada, as gravacións seguintes recoñécena polo nome. Para unha emisora cuxos presentadores volven cada mañá, as etiquetas deixan de ser «Speaker 2» ao cabo da primeira semana. Unha vez comprobada a cita, hai que levala fóra da redacción.
Cada formato da pestana Export dunha transcrición ten un papel na redacción. SRT vai ao editor de vídeo, para que un clip do fluxo leve subtítulos; un SRT traducido leva subtítulos noutro idioma. Excel vai á investigadora, unha fila por frase co seu tempo, para filtrar e anotar. PDF vai á editora que quere ler toda a hora no tren. JSON vai a quen escribe as ferramentas internas da redacción. Pola API, a exportación é GET /v1/recordings/{id}/export?format=srt|json|xlsx|pdf, con lang= para unha versión traducida. Download audio entrega a gravación como MP3 para o paquete mesmo.
Vixiar unha emisión para informar é práctica normal nas redaccións. Republicar un clip dela é outra cousa. Rexénla o uso xusto ou o fair use no lugar onde estés, e os termos da propia emisora, así que as normas habituais da redacción sobre citar a un competidor aplícanse tamén ao audio do competidor. Todo o anterior son uns cuantos clics no panel; para unha redacción con vinte emisoras, é mellor automatizalo cun script.
Todo o camiño está na API, incluído en todos os plans e cobrado á mesma tarifa que no panel. Unha transcrición en directo con fonte de fluxo créase en espera, iníciase coa súa primeira gravación e controlase por HTTP. Como o servidor é quen extrae o audio, iniciar a gravación non devolve ningún fluxo ao que ti teñas que publicar: no teu lado non hai nada que envíe 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"
O Idempotency-Key fai que unha creación repetida devolva a primeira transcrición en lugar dunha segunda. Os SDK de TypeScript e Python envolven as mesmas chamadas e descárganse desde a área para desenvolvedores; a referencia da API recolle todas as rutas e os seus frames.
Un axente de IA pode traballar coa biblioteca sen ningún código. O servidor MCP en /v1/mcp ofrece ao axente un conxunto de ferramentas; entre elas, catro son as que importan aquí. search_transcriptions busca o que se dixo en todas as transcricións da conta, en calquera idioma, e devolve as liñas que coinciden, cada unha coa transcrición en que está e o momento en que se dixo. get_summary devolve o resumo dunha gravación. transcribe_url e wait_for_transcription transcriben un vídeo finalizado ou a ligazón dunha gravación e agardan polo resultado. Iniciar un monitor de fluxo en directo queda no panel ou na API de arriba. A configuración para Claude Code, Cursor ou calquera cliente Streamable HTTP está en Developers → Connect an AI agent; o artigo sobre MCP explícaa paso a paso. Canto custa executar o script é a última pregunta.
A transcrición en directo custa $0.60 por hora de audio, facturada por segundo ($0.01 por minuto), cun mínimo de 5 minutos por transcrición. O directo custa máis que un ficheiro porque se transcribe mentres ocorre, durante todo o tempo que dure. Os ficheiros custan $0.20 por hora ($0.0033 por minuto; un ficheiro de 30 minutos custa $0.10). As tarifas son as mesmas en todos os plans e pola API, e as traducións, os resumos, o nomeamento de falantes, a emisión e a compartición nunca engaden nada á factura.
Unha emisora vixiada oito horas ao día, cinco días á semana, son 40 horas en directo: $24 á semana, sexan cales sexan os idiomas nos que a redacción a le.
Os límites que importan para a vixilancia varían segundo o plan. Cada un aparece na orde Pagamento por uso, Premium, Enterprise:
Unha conta nova comeza con un crédito de rexistro de $5 e sen tarxeta, o que chega para máis de oito horas de vixilancia en directo para probalo. A táboa completa está na páxina de prezos.