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,103 @@
|
||||
# Comerciales (Pautaje)
|
||||
|
||||
Los **comerciales** son audios programados para sonar a horas y minutos específicos, con control de días activos y fechas de vigencia.
|
||||
|
||||
## Archivos `.com`
|
||||
|
||||
Ruta: `~/.gradio/data/comerciales/<hora>/<minuto>.com`
|
||||
|
||||
- Hora: 0 a 23 (sin cero a la izquierda)
|
||||
- Minuto: 0 a 59 (sin cero a la izquierda)
|
||||
- Ejemplo: `~/.gradio/data/comerciales/15/30.com` = tanda de las 15:30
|
||||
|
||||
## Formato de cada línea en un `.com`
|
||||
|
||||
```
|
||||
/ruta/absoluta/al/audio.mp3|1234567|20250101|20251231
|
||||
```
|
||||
|
||||
| Campo | Significado |
|
||||
|-------|-------------|
|
||||
| `/ruta/...` | Ruta absoluta al archivo de audio |
|
||||
| `1234567` | Máscara de días activos: cada dígito = un día (1=Lun, 2=Mar, 3=Mié, 4=Jue, 5=Vie, 6=Sáb, 7=Dom). `1234567` = todos los días |
|
||||
| `20250101` | Fecha de inicio de vigencia (AAAAMMDD) |
|
||||
| `20251231` | Fecha de fin de vigencia (AAAAMMDD) |
|
||||
|
||||
### Ejemplos de máscaras de días
|
||||
|
||||
```
|
||||
1234567 → todos los días
|
||||
12345 → lunes a viernes
|
||||
67 → sábado y domingo
|
||||
135 → lunes, miércoles, viernes
|
||||
1 → solo lunes
|
||||
```
|
||||
|
||||
### Ejemplos de entradas `.com`
|
||||
|
||||
```
|
||||
/home/grecord/Comerciales/spot_banco.mp3|12345|20250601|20250630
|
||||
/home/grecord/Comerciales/promo_fin_semana.mp3|67|20250101|20251231
|
||||
/home/grecord/Comerciales/jingle_general.mp3|1234567|20250101|20261231
|
||||
```
|
||||
|
||||
## Cola activa `comercialeslist4`
|
||||
|
||||
`~/.gradio/data/tmp/comercialeslist4` contiene la cola que el player está procesando **ahora**. Solo tiene rutas (ya sin máscara ni fechas, esas ya fueron evaluadas por el scheduler):
|
||||
|
||||
```
|
||||
/home/grecord/Comerciales/spot_banco.mp3
|
||||
/home/grecord/Comerciales/jingle_general.mp3
|
||||
```
|
||||
|
||||
## Archivo `played_breaks`
|
||||
|
||||
`~/.gradio/data/tmp/played_breaks` registra las tandas que ya fueron reproducidas manualmente hoy (para que el scheduler no las vuelva a disparar):
|
||||
|
||||
```
|
||||
20250627 15:30
|
||||
20250627 16:00
|
||||
```
|
||||
|
||||
## Comandos útiles
|
||||
|
||||
```bash
|
||||
# Ver la tanda de las 15:30
|
||||
cat ~/.gradio/data/comerciales/15/30.com
|
||||
|
||||
# Ver todos los comerciales programados para hoy (lunes = día 1)
|
||||
HOY=$(date +%u)
|
||||
for h in $(seq 0 23); do
|
||||
for f in ~/.gradio/data/comerciales/$h/*.com; do
|
||||
[ -f "$f" ] || continue
|
||||
grep "|.*$HOY" "$f" && echo " → $f"
|
||||
done
|
||||
done
|
||||
|
||||
# Ver qué está en cola activa
|
||||
cat ~/.gradio/data/tmp/comercialeslist4
|
||||
|
||||
# Agregar un comercial a las 16:00 de hoy (todos los días, vigente todo el año)
|
||||
echo "/ruta/spot.mp3|1234567|20250101|20261231" >> ~/.gradio/data/comerciales/16/0.com
|
||||
|
||||
# Crear directorio si no existe
|
||||
mkdir -p ~/.gradio/data/comerciales/16
|
||||
echo "/ruta/spot.mp3|1234567|20250101|20261231" >> ~/.gradio/data/comerciales/16/0.com
|
||||
|
||||
# Reproducir tanda inmediatamente (sin esperar al scheduler)
|
||||
echo "/ruta/spot.mp3" > ~/.gradio/data/tmp/comercialeslist4
|
||||
touch ~/.gradio/data/tmp/cmd_play_tanda
|
||||
|
||||
# Ver tandas ya reproducidas hoy
|
||||
cat ~/.gradio/data/tmp/played_breaks
|
||||
```
|
||||
|
||||
## Cómo funciona el scheduler
|
||||
|
||||
El daemon `comercial-scheduler` (Rust) se activa en el minuto **:58** de cada hora y:
|
||||
1. Lee los archivos `.com` del minuto y hora siguientes
|
||||
2. Filtra por día activo (máscara) y fechas de vigencia
|
||||
3. Carga las rutas válidas en `comercialeslist4`
|
||||
4. El player las procesa cuando llega el momento
|
||||
|
||||
Si una tanda aparece en `played_breaks` con fecha/hora de hoy, el scheduler la salta (ya se reprodujo manualmente).
|
||||
Reference in New Issue
Block a user