No artigo anterior, mergulhei na clusterização de notícias com TF-IDF e como agrupamos conteúdo semelhante para criar blocos temáticos. Hoje vou contar como esses blocos viram um podcast com três apresentadores — tudo gerado automaticamente com Azure AI Speech e GPT-4o-mini.

Por que um podcast?

A ideia surgiu de uma observação simples: nem todo mundo tem tempo de ler. Muita gente consome conteúdo durante o trajeto pro trabalho, na academia ou lavando louça. Um resumo em áudio das principais notícias de tech do dia complementa perfeitamente o conteúdo escrito do site.

Mas eu não queria um áudio monótono, tipo aquele robô lendo texto corrido. Queria algo que parecesse uma conversa entre amigos — com debate, humor e explicações técnicas. Foi aí que nasceu a ideia dos três apresentadores.

Os três apresentadores

O podcast do Decodifica.Tech tem três vozes com personalidades distintas:

  • Anna (âncora) — usa a voz pt-BR-Thalita:DragonHDLatestNeural. Conduz o programa, faz as transições e mantém o ritmo.
  • Maria (técnica) — usa a voz pt-BR-FranciscaNeural. Traz as explicações mais profundas, contexto histórico e detalhes de implementação.
  • Pedro (humor) — usa a voz pt-BR-Macerio:DragonHDLatestNeural. Faz as piadas, reações rápidas e mantém a conversa leve.

Por que três em vez de uma? Dinâmica. Quando você tem três pessoas conversando, surge debate natural. A Anna apresenta o tema, a Maria aprofunda, o Pedro faz um comentário engraçado — e o ouvinte se mantém engajado porque a troca constante de vozes quebra a monotonia.

Gerando o roteiro com GPT-4o-mini

O roteiro é gerado usando GPT-4o-mini com temperature=0.9 — um valor alto o suficiente para gerar diálogos criativos sem perder coerência. O prompt é construído instruindo o modelo a criar uma conversa natural entre os três apresentadores, com regras específicas:

  • Usar expressões brasileiras naturais (“mano”, “cara”, “tipo”, “tá ligado”)
  • Alternar entre falas curtas (reações) e explicações mais longas
  • Incluir momentos de humor e concordância/discordância entre os hosts
  • Manter o conteúdo técnico acessível

O resultado é um script que parece de fato uma conversa entre amigos discutindo tech — não um TCC sendo lido em voz alta.

SSML: o coração da síntese multi-voz

SSML (Speech Synthesis Markup Language) é uma linguagem de marcação que permite controlar exatamente como o texto é sintetizado. No nosso caso, usamos para orquestrar três vozes diferentes num mesmo arquivo de áudio.

A estrutura básica do SSML multi-voz fica assim:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="http://www.w3.org/2001/mstts"
       xml:lang="pt-BR">
  <voice name="pt-BR-Thalita:DragonHDLatestNeural">
    <mstts:ttsembedding speakingStyle="chat">
      <prosody>
        E aí, pessoal! Hoje a gente vai falar sobre...
      </prosody>
    </mstts:ttsembedding>
  </voice>
  <voice name="pt-BR-FranciscaNeural">
    <mstts:express-as style="curious">
      <prosody rate="0%" pitch="0%">
        Então, basicamente o que acontece é que...
      </prosody>
    </mstts:express-as>
  </voice>
</speak>

DragonHD vs vozes padrão

Aqui tem uma diferença importante. A Anna e o Pedro usam vozes DragonHD — a mais recente geração de TTS neural da Azure. Essas vozes são tão naturais que não precisam de tags de prosódia. Elas detectam automaticamente a emoção do texto e ajustam entonação, ritmo e ênfase sozinhas.

Para as vozes DragonHD, usamos o parâmetro temperature=0.8, que controla a variabilidade da fala — mais alto significa mais expressivo e menos previsível.

Já a Maria usa pt-BR-FranciscaNeural, uma voz padrão (não DragonHD). Para ela, aplicamos controles explícitos de prosódia (rate e pitch) e usamos mstts:express-as com estilos como excited, cheerful e curious.

Detecção automática de estilo

O código classifica automaticamente o estilo de cada fala da Maria baseado no conteúdo:

  • Exclamações → estilo excited
  • Risadas ou “haha” → estilo cheerful
  • Perguntas → estilo curious

Isso dá naturalidade sem precisar anotar manualmente cada linha do roteiro.

O truque do <lang> para termos em inglês

Quem já ouviu um TTS em português tentando pronunciar “Kubernetes” ou “machine learning” sabe o drama. A pronúncia fica horrível. A solução? Envolver termos técnicos em inglês com a tag <lang>:

<voice name="pt-BR-Thalita:DragonHDLatestNeural">
  A nova versão do <lang xml:lang="en-US">Kubernetes</lang> trouxe melhorias
  significativas no <lang xml:lang="en-US">autoscaling</lang>.
</voice>

Com isso, o engine de TTS muda temporariamente para o modelo fonético do inglês, pronuncia o termo corretamente e volta pro português. Simples e eficaz.

Hacks divertidos de pronúncia

Dois probleminhas que apareceram e suas soluções:

“IA” → “I.A.” — Quando o TTS encontra “IA” junto, ele tenta pronunciar como uma sílaba (“iá”). Substituindo por “I.A.” com pontos, ele soletra corretamente: “i”, “a”.

“Decodifica.tech” → “Decodifica téqui” — O TTS não sabe o que fazer com “.tech” como domínio. Ele lê “ponto tech” ou tenta algo estranho. A solução foi substituir por “Decodifica téqui” no texto enviado pro SSML, que reproduz foneticamente como a gente realmente fala o nome do projeto.

São coisas pequenas, mas fazem toda a diferença na experiência do ouvinte.

Pós-processamento de áudio

Depois que o Azure Speech gera o áudio com as três vozes, ainda temos um pipeline de pós-processamento usando pydub:

  1. Jingle de abertura — um arquivo de áudio é prepended no início do episódio
  2. Música de fundo — uma trilha instrumental é mixada a -20dB abaixo da voz (volume suficiente pra dar “clima” sem atrapalhar a compreensão)

Sistema de classificação de pausas

Para dar ritmo natural à conversa, o código classifica cada linha do roteiro em três categorias:

TipoPausa após a falaExemplo
Reações curtas250ms“Nossa!”, “Exato!”, “Tá ligado?”
Falas médias400msComentários e transições
Explicações longas550msExplicações técnicas detalhadas

Essas pausas entre falas simulam o tempo natural que as pessoas levam para “responder” numa conversa real. Sem isso, as vozes se atropelam e o resultado fica artificial.

Quanto custa tudo isso?

Essa é a parte que mais surpreende: o custo do Azure AI Speech para gerar os episódios diários fica em torno de ~$0.08/mês. Sim, oito centavos de dólar.

O tier gratuito do Azure Speech já cobre uma quantidade generosa de caracteres, e como cada episódio tem uns poucos milhares de caracteres de SSML, a conta fica absurdamente baixa. Somando o GPT-4o-mini para gerar os roteiros, o custo total do podcast automatizado é trivial.

Ouça um episódio

Se você quer conferir como fica o resultado final de tudo isso rodando junto — as três vozes, os estilos automáticos, as pausas naturais, a música de fundo — dá play num episódio:

🎧 Decodifica.Tech no Spotify

Recomendo ouvir com fone pra perceber os detalhes: as mudanças de entonação, os momentos de humor do Pedro, a naturalidade das vozes DragonHD.

Encerrando os bastidores

Este é o último artigo da série “bastidores” do Decodifica.Tech. Nos quatro artigos, passei pela arquitetura geral, a coleta de notícias, a clusterização com TF-IDF e agora a geração do podcast. A partir das próximas semanas, os artigos mudam de formato — vou trazer tutoriais gerais sobre as tecnologias que uso, aplicáveis a qualquer projeto.

Se você curtiu essa série e quer se aprofundar no código, o repositório está aberto:

👉 github.com/ricmmartins/decodifica.tech

Tem dúvida, sugestão ou quer compartilhar como você resolveria algo diferente? Deixa nos comentários! Adoro trocar ideia sobre automação e text-to-speech.

Até a próxima! 🎙️