# G Radio Player Reproductor de radio profesional — GTK4 + GStreamer + Rust ## Binarios | Binario | Descripción | |---|---| | `radio-player` | Interfaz principal GTK4 | | `comercial-scheduler` | Carga comerciales y eventos al segundo :58 de cada minuto | | `playlist-refill` | Mantiene la cola de música con 14 temas leyendo de la parrilla | ## Compilar ```bash ./build.sh ``` ## Ejecutar ```bash ./run.sh # inicia los tres procesos juntos ``` O por separado (para depuración): ```bash RUST_LOG=info ./target/release/radio-player ./target/release/comercial-scheduler ./target/release/playlist-refill ``` ## Estructura de archivos ``` $HOME/.gradio/data/ ├── tmp/ │ ├── playlist4 # cola de música (ruta TAB MM:SS.mmm) │ ├── comercialeslist4 # cola de comerciales │ ├── eventos-esperalist # eventos post-comerciales │ └── eventoslist # eventos emergentes ├── comerciales/ │ └── {HH}/{MM}.com # pautas por hora:minuto │ formato: ruta|dias|YYYYMMDD_ini|YYYYMMDD_fin │ dias: "12345" = Lun-Vie, "67" = Sáb-Dom ├── eventos-espera/ │ └── {HH}/{MM}.com # mismo formato ├── eventos/ │ └── {HH}/{MM}.com # mismo formato ├── parrilla/ │ └── {DOW}/{HH}-{HH+1}.mus # archivos de música por franja │ formato: ruta/al/archivo.mp3 o /ruta/carpeta/* └── reporte/ ├── GR6-parrilla-YYYY-MM-DD.txt ├── GR6-comercial-YYYY-MM-DD.txt └── GR6-evento-YYYY-MM-DD.txt $HOME/.gradio/data/mix # segundos de crossfade $HOME/.gradio/data/tmp/upvol # volumen normal 0-100 $HOME/.gradio/data/tmp/downvol # volumen duck 0-100 $HOME/.gradio/data/panel/Time/ # HRS{HH}.mp3, HRS{HH}_O.mp3, MIN{MM}.mp3 $HOME/G Radio/inicio-espacio-pub/ # jingles inicio tanda $HOME/G Radio/fin-espacio-pub/ # jingles fin tanda ``` ## Formato de pautas (.com) ``` /ruta/al/audio.mp3|12345|20250101|20251231 /otra/pista.wav|67|20250601|20250630 ``` - Campo 1: ruta del archivo - Campo 2: máscara de días (1=Lun … 7=Dom) - Campo 3: fecha inicio YYYYMMDD - Campo 4: fecha fin YYYYMMDD ## Formato de parrilla (.mus) ``` /ruta/carpeta/* # elige aleatoriamente de la carpeta /ruta/exacta/tema.mp3 # archivo concreto ``` ## Dependencias del sistema - GTK4 ≥ 4.6 - GStreamer ≥ 1.20 con plugins: gst-plugins-base, gst-plugins-good, gst-plugins-ugly - ffprobe (paquete ffmpeg) — usado por playlist-refill para leer duraciones ## Variables de entorno - `GRADIO_RELAY_URL` — URL del servidor de relay WebSocket para acceso remoto vía internet (default `wss://relay.example.com/ws`). Para autohospedaje, definirla antes de lanzar `radio-player`. ## Licencia Distribuido bajo los términos de la **GNU General Public License v3.0 o posterior** (GPL-3.0-or-later). Ver el archivo [`LICENSE`](./LICENSE). Este programa enlaza dinámicamente con **GTK4** y **GStreamer**, ambos publicados bajo LGPL-2.1+ y compatibles con GPL-3.0.