Files
G-Radio-Player/assets/opencode/context/01-estructura.md
T
cescobar 03084e2d5a Commit inicial: G Radio Player
Sistema de automatización de radio en Rust (GTK4 + GStreamer): reproductor
principal con crossfade y ducking, scheduler de comerciales, refill de
playlist, y herramientas auxiliares (pautaje, parrilla, botonera, visor,
buscador, playlist, grabador, reportes). Incluye sistema de skins y modos
de Players (paneles de reproducción configurables).
2026-08-23 00:57:40 -05:00

116 lines
5.1 KiB
Markdown

# Estructura de G-Radio-Player
Sistema de automatización de radio profesional en **Rust + GTK4**. Tres procesos coordinados que se comunican mediante archivos compartidos en `~/.gradio/data/tmp/`.
## Binarios instalados en `/usr/local/bin/`
| Binario | Descripción |
|---|---|
| `radio-player` | UI principal GTK4 — reproduce música, maneja crossfade, Duck |
| `comercial-scheduler` | Daemon que se activa en el minuto :58 y carga las tandas del minuto siguiente |
| `playlist-refill` | Daemon que revisa cada 5s y rellena `playlist4` con ~14 temas de la parrilla |
| `gradio.sh` | Lanzador principal (mata procesos previos, inicia los 3 procesos + watchdog) |
| `gr-botonera` | Ventana de botonera de efectos y jingles rápidos |
| `gr-parrilla` | Editor de parrilla semanal (qué suena cada hora) |
| `gr-pautaje` | Editor de pautaje comercial (qué comerciales suenan cada minuto) |
| `gr-playlist` | Editor de playlist |
| `gr-buscador` | Buscador de archivos de audio con preescucha |
| `gr-visor` | Visor de reportes y programación |
| `gr-reportes` | Generador de reportes de reproducción |
| `gr-record` | Grabación de audio |
## Árbol de datos `~/.gradio/data/`
```
~/.gradio/data/
├── tmp/ ← Estado en vivo (leer/escribir aquí)
│ ├── gradio.config ← Configuración principal (18 líneas)
│ ├── playlist4 ← Cola musical: "ruta\tduracion" por línea
│ ├── comercialeslist4 ← Cola activa de comerciales (solo rutas)
│ ├── eventoslist ← Cola activa de eventos (solo rutas)
│ ├── eventos-esperalist ← Cola activa de eventos en espera
│ ├── estado.json ← Estado completo del player (se escribe cada 2s)
│ ├── upvol ← Volumen principal 0-100
│ ├── downvol ← Volumen duck 0-100
│ ├── cmd_play ← Señal: reproducir (crear el archivo para activar)
│ ├── cmd_pause ← Señal: pausar
│ ├── cmd_stop ← Señal: detener deck A
│ ├── cmd_stop_after ← Señal: toggle "detener al terminar el tema"
│ ├── cmd_siguiente ← Señal: saltar al siguiente tema
│ ├── cmd_stop_general ← Señal: detener TODO (música + comerciales + eventos)
│ ├── cmd_play_tanda ← Señal: reproducir tanda de comerciales inmediata
│ ├── botonera_now ← Señal: ruta de audio a reproducir en botonera
│ ├── play_now ← Señal: "ruta\tduracion" para reproducir ahora
│ └── played_breaks ← Tandas ya reproducidas hoy (YYYYMMDD HH:MM por línea)
├── parrilla/ ← Programación semanal de música
│ ├── 1/ ← Lunes (1=Lun, 2=Mar, ..., 7=Dom)
│ │ ├── 0-1.mus ← Bloque 00:00-01:00 del lunes
│ │ ├── 8-9.mus
│ │ └── ...
│ ├── 2/ ... 7/
├── comerciales/ ← Pautaje de comerciales
│ ├── 0/ ← Hora 0 (00:xx)
│ │ ├── 0.com ← Comerciales a las 00:00
│ │ ├── 30.com ← Comerciales a las 00:30
│ │ └── ...
│ └── 1/ ... 23/
├── eventos/ ← Eventos programados (mismo formato .com)
│ └── <hora>/<minuto>.com
├── eventos-espera/ ← Eventos en espera del operador
│ └── <hora>/<minuto>.com
├── botonera/config.json ← Botones configurados en gr-botonera
├── panel/Time/ ← 109 audios de hora (HRS00..HRS23, MIN01..MIN59, etc.)
└── reporte/ ← Reportes CSV de reproducción
```
## Archivo `gradio.config` (18 líneas)
```
línea 1: tarjeta audio principal (vacío = auto)
línea 2: tarjeta audio CUE (vacío = auto)
línea 3: nombre del medio
línea 4: tiempo de fundido crossfade (segundos)
línea 5: pisador habilitado (1/0)
línea 6: carpeta de pisadores
línea 7: cada cuántos temas tocar pisador
línea 8: carpetas excluidas de pisador (formato: "/ruta/a";"/ruta/b")
línea 9: silencio máximo en segundos (0=desactivado)
línea 10: carpetas de música nacional (para reportes)
línea 11: carpetas de interculturalidad (para reportes)
línea 12: puerto servidor gr-client (default 7777)
línea 13: token de autenticación gr-client
línea 14: relay habilitado (1/0)
línea 15: ID de relay (8 dígitos)
línea 16: días de no-repetición (default 3)
línea 17: locale ("es"/"en"/"pt" o vacío=auto)
línea 18: IA habilitada (1/0)
```
## Archivo `estado.json` (se actualiza cada 2 segundos)
```json
{
"reproduciendo": true,
"pausado": false,
"track_actual": "/home/usuario/Música/tema.mp3",
"titulo_actual": "Nombre del tema",
"posicion_secs": 45.3,
"duracion_secs": 210.0,
"upvol": 90,
"downvol": 20,
"comerciales_activos": false,
"eventos_activos": false,
"num_comerciales": 3,
"num_eventos": 0,
"num_eventos_espera": 1,
"indice_actual": 7
}
```