Files
cescobar 2f6b5340f5 Commit inicial: gr-locutor (Locutor IA - GRP)
Locuciones de radio con voz IA local (XTTS-v2) integradas a G Radio
Player: interfaz Rust/GTK4 de configuración, motor de generación y
enriquecimiento de texto en Python, daemon de monitoreo que dispara
locuciones sin pausar playlist-refill. Requiere radio-player >= 0.4.11.
2026-08-23 01:58:56 -05:00

2.7 KiB

Arquitectura del Locutor Automático IA

Componentes instalados

Ruta Rol
~/.gradio/locutor-venv/ Entorno virtual Python con el motor XTTS-v2 (torch, coqui-tts, transformers)
~/.gradio/locutor-venv/gr-locutor.sh Wrapper: gr-locutor.sh "texto" [nombre] → genera un MP3
~/.gradio/data/locutor-ia/generar.py Script real de síntesis (llamado por el wrapper)
~/.gradio/data/locutor-ia/referencia/voz_referencia.wav Voz de referencia activa (genérica de GRP o la de la estación)
~/.gradio/data/locutor-ia/salida/ MP3 generados
~/.gradio/data/locutor-ia/scripts/enriquecer-locucion.py Genera el texto: metadata ID3 + Wikipedia + MusicBrainz
~/.gradio/data/locutor-ia/scripts/generar-intro.sh Orquesta: texto enriquecido → gr-locutor.sh
~/.gradio/data/locutor-ia/scripts/monitor-locuciones.py Daemon: mantiene 3 locuciones listas en playlist4
~/.gradio/data/locutor-ia/scripts/start-monitor.sh start / stop / status del monitor

Flujo de una locución

monitor-locuciones.py detecta que faltan locuciones en la ventana
  └── generar-intro.sh "/ruta/tema.mp3"
        ├── enriquecer-locucion.py → texto (metadata + Wikipedia + MusicBrainz)
        └── gr-locutor.sh "texto" → generar.py → XTTS-v2 → MP3 en salida/
  └── monitor inserta el MP3 en playlist4 delante de la canción

Coordinación con playlist-refill

playlist-refill (proceso de GRP) agrega canciones al final de playlist4 hasta llegar a 14 temas. Si corre a la vez que el monitor inserta locuciones, puede haber una carrera (leer-generar-escribir tarda varios segundos, y mientras tanto el player puede haber consumido temas).

Solución ya implementada: monitor-locuciones.py crea ~/.gradio/data/tmp/pause_refill al iniciar (GRP ya respeta este archivo — es el mismo mecanismo del botón "Automático" de la UI) y lo borra al detenerse. No hace falta ninguna acción manualstart-monitor.sh start/stop lo maneja solo.

Bandera de habilitación

~/.gradio/data/tmp/locutor_auto (1/0) — se controla desde el diálogo de Configuración de GRP ("Locutor Automático"). El monitor y el generador no deberían correr si está en 0.

Rendimiento medido (texto de referencia ~10s de audio)

Máquina Generar Cargar modelo (1 vez)
Escritorio con GPU NVIDIA ~2s ~10s
Escritorio CPU (20 hilos, sin GPU) ~29s ~10s
RPi5 real (CPU, sin GPU) ~104s ~120s

Todos entran en el margen de una canción de 3-4 minutos. La recomendación es no correr el generador en la misma máquina que reproduce en vivo salvo que tenga GPU o de sobra de RAM/CPU — en el RPi5 se midió presión real de memoria (swap) al generar en aislamiento.