Montar una estación de transmisión continua 24/7 en internet suele implicar dos caminos viciados: pagar costosos servicios SaaS de radio por streaming con límites ridículos de ancho de banda y paneles arcaicos, o saturar el disco de un servidor dedicado almacenando gigabytes de archivos de audio locales. En el búnker experimental de Psychotic decidimos tomar el tercer camino: construir una arquitectura de soberanía tecnológica total que combina Icecast2, Nginx con proxy inverso SSL, streaming de objetos en memoria pura desde Google Cloud Storage (Zero Disk Usage), transcodificación en tiempo real con FFmpeg y locución generativa automatizada con Gemini Flash TTS en Vertex AI.
1. La Topología del Sistema: Cero Bytes Ocupados en Disco Local
El núcleo de la emisora corre sobre una instancia Ubuntu Linux ARM64 en Oracle Cloud. Para evitar agotar el almacenamiento del disco de arranque y permitir que la biblioteca musical crezca de forma ilimitada, diseñamos un streamer en Python (radio_streamer.py) que interactúa directamente con los SDKs de Google Cloud Storage:
- Almacenamiento Desacoplado: Las pistas maestras y las cuñas de locución viven en un bucket privado y aislado de Google Cloud Storage. Al ser un repositorio privado con autenticación mediante cuentas de servicio de privilegios mínimos, los datos permanecen completamente blindados del exterior.
- Streaming en Memoria RAM: El cliente de transmisión lee los blobs de audio en fragmentos binarios (chunks) mediante memoria RAM y los empuja directamente al socket TCP de Icecast. Cero archivos temporales en el sistema de archivos del servidor.
- Modo Shuffle Inteligente: Cada tanda de reproducción baraja aleatoriamente tanto el catálogo musical como el catálogo de locuciones, garantizando una rotación impredecible y fresca.
2. Transcodificación Continua al Vuelo con FFmpeg
Uno de los retos técnicos críticos en los streams de Icecast al reproducirse en navegadores modernos (Chrome, Safari, Edge) es la discrepancia de formato: si una pista de música está codificada a 48,000 Hz estéreo y la siguiente cuña de voz está a 44,100 Hz mono, el decodificador de audio del navegador interpreta el salto como un fin de archivo (audio ended) y enmudece la transmisión.
Para erradicar este problema de raíz, interpusimos una tubería de transcodificación en tiempo real con FFmpeg a velocidad nominal (-re). Sin importar el sample rate, tasa de bits o cantidad de canales del archivo fuente, la tubería normaliza todo el flujo hacia el punto de montaje a 192 kbps, 44,100 Hz y 2 canales estéreo (libmp3lame) de forma ininterrumpida.
3. Locución Generativa y Producción con Gemini Flash TTS
Para darle vida a la identidad de la estación, desarrollamos una suite de 25 cuñas de voz y «sweepers» institucionales sintetizados con la API de audio generativo de Gemini en Vertex AI (voces Charon, Fenrir, Kore, Puck y Aoede). Cada cuña seca es posteriormente ensamblada en posproducción mediante un motor de mezcla automatizado con bases musicales producidas en Suno AI, aplicando curvas de ducking al 55% y remates con fade-out progresivo.
4. Metadatos en Tiempo Real y Widget Autocontenido
Mediante la API administrativa de Icecast (/admin/metadata), el daemon actualiza el título de la canción y el artista en cada cambio de tema. El reproductor web (construido bajo una arquitectura táctica y aislada en HTML5/CSS3) consulta asíncronamente el endpoint JSON de la emisora, actualizando la interfaz y sincronizándose con la API nativa de MediaSession de los sistemas operativos móviles y de escritorio.
Infraestructura soberana, código propio y cero dependencias de plataformas de streaming corporativas. La radio transmite 24/7 en gemini.psychotic.blog/radio y en psychotic.blog/radio.