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:
- Jingle de abertura — um arquivo de áudio é prepended no início do episódio
- 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:
| Tipo | Pausa após a fala | Exemplo |
|---|---|---|
| Reações curtas | 250ms | “Nossa!”, “Exato!”, “Tá ligado?” |
| Falas médias | 400ms | Comentários e transições |
| Explicações longas | 550ms | Explicaçõ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:
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! 🎙️
💬 Comentários