NeuroRadio: Criando uma Estação de Rádio Autônoma no Terminal

NeuroRadio: Criando uma Estação de Rádio Autônoma no Terminal

Descubra como construir sua própria estação de rádio na internet com um DJ de inteligência artificial. Este artigo detalha o processo de indexação de músicas, a integração de LLMs para narração e a configuração de transmissão ao vivo.

MundiX News·11 de maio de 2026·7 min de leitura·👁 7 views

A ideia de se tornar um DJ de rádio, anunciando faixas, compartilhando fatos sobre artistas e discutindo música, pode se tornar realidade com sua própria estação de rádio na internet, apresentando um DJ com inteligência artificial. Este artigo explora como configurar e lançar tal sistema.

Em uma noite, surgiu o desejo de integrar não apenas faixas de música eletrônica, mas também discussões ao vivo sobre lançamentos, preferências e curiosidades sobre músicos. Embora uma discussão animada não tenha se concretizado, um participante compartilhou um link para uma estação de rádio na internet caseira. O design minimalista, visualização simples e a capacidade de curtir músicas ao vivo eram intrigantes, mas a estação ficou offline após uma hora e meia, permanecendo inoperante por um longo período.

Durante a discussão, um fato interessante surgiu: hoje em dia, é difícil encontrar uma transmissão 24 horas por dia que, além da música, apresente um DJ comentando o programa, conduzindo conversas inteligentes sobre gravadoras e relembrando os anos de lançamento de obras-primas. No dia seguinte, a ideia de criar minha própria estação de rádio na internet com um neuro-DJ tomou forma. Naquele momento, eu ainda não sabia o quão complexo seria implementar, mas já tinha uma arquitetura aproximada em mente, pois já havia trabalhado com cada componente da futura estação individualmente.

Indexando a Coleção

Primeiramente, precisei compilar um banco de dados com as tags da minha coleção de músicas. Essencialmente, fiz o mesmo que a maioria dos players populares faz ao escanear diretórios. Um pequeno script Python com a biblioteca mutagen criou um banco de dados (SQLite) com a tabela principal tracks: id, title, artist_id, album, year, genre, path. Uma tabela auxiliar Artists continha apenas ID e nome. Na próxima iteração, foi necessário criar um mecanismo de reprodução: fazer uma consulta aleatória ao banco de dados, extrair a faixa e o caminho para ela no sistema de arquivos local, e então alimentar esse caminho para o player mpg123. Em sua forma atômica, isso já é um sistema automático, um DJ eletrônico. Faltava apenas a transmissão em si, mas eu não me preocupei com isso na época – sabia que existia o Icecast e que não deveria haver problemas com ele.

O Cérebro da Estação: LLM e Combate a Alucinações

A segunda parte do projeto era o próprio DJ. Ele deveria entrar no ar e falar sobre música, preferencialmente falando a verdade, sem alucinar ou inventar informações sobre a faixa que estava tocando no momento.

No meu host local, configurei o LM Studio, que coube no limite de 4 GB de VRAM da minha GTX 1650 móvel. O LM Studio possui uma função de servidor com uma API compatível com OpenAI. Decidi usá-lo simplesmente porque já estava configurado, mas com o mesmo sucesso, poderia ter usado llama.cpp ou Ollama.

Para evitar que a rede neural inventasse fatos, o prompt (além do nome da faixa e do artista) precisava ser enriquecido com dados reais. Várias soluções vieram à mente para obter biografias de músicos: Discogs, MusicBrainz e Deezer. Discogs se mostrou uma opção inviável (embora em outras circunstâncias seja ideal). MusicBrainz é mais voltado para a classificação de gêneros, e Deezer nem sequer funcionou, presenteando-me com mensagens enigmáticas e um eterno carregamento da página de login.

No final, lembrei-me de como comecei a me familiarizar com música na internet e fui para o last.fm. O site abriu, a senha de dez anos atrás funcionou, a chave da API foi obtida sem problemas e a documentação se mostrou extremamente clara. Foi nele que decidi parar.

Para obter informações (Bio), utilizei dois métodos da API: artist.search para buscar pelo nome e artist.getinfo para obter dados da primeira correspondência. Decidi negligenciar erros nesta etapa – a coleção é minha, e a maioria dos artistas eu já conheço. O Last.fm retorna a resposta em formato JSON, do qual extraio a biografia e a insiro no prompt para o modelo LLM local mistralai/mistral-7b-instruct-v0.2.

A Voz: Fazendo a Rede Neural Falar

O modelo Mistral roda no meu hardware quase no limite mínimo razoável – 5-6 tokens por segundo (o que é aproximadamente a velocidade de digitação cega de texto). É claro que gerar "interlúdios" (falas do DJ) em tempo real não seria possível. Portanto, a solicitação para o LLM é enviada com antecedência, enquanto um bloco de 3-5 faixas não anunciadas, escolhidas aleatoriamente do banco de dados, está tocando.

Enquanto a música toca, o LLM gera o texto com base nas tags e na biografia do last.fm. Em seguida, entra em ação o modelo Text-to-Speech (TTS) f5-tts. Como o f5-tts original é em inglês, encontrei no Hugging Face um fork f5-tts_russian. Se você tentar pronunciar texto em russo com um modelo puramente em inglês, o resultado será lamentável – ele simplesmente não tem os pesos para fonemas russos, e o DJ falará com um sotaque terrível.

O f5-tts é um modelo zero-shot. Para fazê-lo falar com a voz desejada, não é necessário treiná-lo por muito tempo. Basta fornecer um áudio de amostra (10-20s) e sua transcrição de texto. Na saída, obtemos a locução do texto gerado com o timbre desejado. A amostra foi encontrada em um mercado de atores de voz – escolhi uma voz com um sotaque britânico limpo. Eu queria que meu DJ falasse em russo como se essa língua não fosse totalmente nativa para ele ou se ele a tivesse esquecido um pouco. E essa foi a decisão correta: as faixas da coleção são predominantemente em inglês, e o modelo pronuncia seus nomes impecavelmente.

O Ar: Icecast, FFmpeg e a Magia dos Pipes

Enquanto o rádio funcionava localmente, não havia problemas: as faixas tocavam em sequência através do mpg123, os chunks de neuro-locução eram pré-concatenados no FFmpeg e iniciados no momento certo. Mas quando decidi colocar a estação de rádio na rede global, os detalhes começaram a surgir.

O restante do conteúdo está disponível apenas para membros.

Materiais das últimas edições tornam-se disponíveis individualmente apenas dois meses após a publicação. Para continuar a leitura, é necessário se tornar um membro da comunidade "Xakep.ru".

Junte-se à comunidade "Xakep.ru"!

A associação à comunidade durante o período especificado lhe dará acesso a TODO o material "Xakep", permitirá baixar edições em PDF, desativará a publicidade no site e aumentará seu desconto acumulado pessoal!

Saiba mais

Já sou membro do "Xakep.ru"

← Anterior

O ransomware VECT 2.0 destrói arquivos com mais de 128 KB

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.