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).
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
# 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
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user