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).
181 lines
5.1 KiB
Markdown
181 lines
5.1 KiB
Markdown
# Comandos y Control del Sistema
|
|
|
|
## Control de reproducción (señales IPC)
|
|
|
|
El player monitorea la carpeta `~/.gradio/data/tmp/` cada 200ms. Para enviar un comando, **crea el archivo** — el player lo lee, ejecuta la acción y borra el archivo.
|
|
|
|
```bash
|
|
TMP=~/.gradio/data/tmp
|
|
|
|
# Reproducir (reanudar desde pausa)
|
|
touch "$TMP/cmd_play"
|
|
|
|
# Pausar / reanudar (toggle)
|
|
touch "$TMP/cmd_pause"
|
|
|
|
# Detener deck A (deja los comerciales intactos)
|
|
touch "$TMP/cmd_stop"
|
|
|
|
# Toggle "detener al terminar el tema actual"
|
|
touch "$TMP/cmd_stop_after"
|
|
|
|
# Saltar al siguiente tema
|
|
touch "$TMP/cmd_siguiente"
|
|
|
|
# STOP GENERAL: detiene música + comerciales + eventos todo
|
|
touch "$TMP/cmd_stop_general"
|
|
|
|
# Reproducir tanda de comerciales AHORA (sin esperar al scheduler)
|
|
# Primero cargar la lista, luego la señal
|
|
echo "/ruta/spot1.mp3" > "$TMP/comercialeslist4"
|
|
echo "/ruta/spot2.mp3" >> "$TMP/comercialeslist4"
|
|
touch "$TMP/cmd_play_tanda"
|
|
|
|
# Reproducir audio en botonera (sin interrumpir música ni comerciales)
|
|
echo "/ruta/efecto.mp3" > "$TMP/botonera_now"
|
|
|
|
# Reproducir tema inmediatamente (crossfade hacia él)
|
|
echo -e "/ruta/tema.mp3\t00:03:45.000" > "$TMP/play_now"
|
|
```
|
|
|
|
## Estado del sistema
|
|
|
|
```bash
|
|
# Estado completo (JSON actualizado cada 2s)
|
|
cat ~/.gradio/data/tmp/estado.json
|
|
|
|
# Estado formateado
|
|
cat ~/.gradio/data/tmp/estado.json | python3 -m json.tool
|
|
|
|
# Valores individuales
|
|
python3 -c "
|
|
import json
|
|
d = json.load(open('$HOME/.gradio/data/tmp/estado.json'))
|
|
print(f'Reproduciendo: {d[\"reproduciendo\"]}')
|
|
print(f'Tema actual: {d[\"titulo_actual\"]}')
|
|
print(f'Posición: {d[\"posicion_secs\"]:.0f}s / {d[\"duracion_secs\"]:.0f}s')
|
|
print(f'Volumen: up={d[\"upvol\"]}% duck={d[\"downvol\"]}%')
|
|
print(f'Comerciales: {d[\"num_comerciales\"]} en cola, activos={d[\"comerciales_activos\"]}')
|
|
print(f'Eventos: {d[\"num_eventos\"]}')
|
|
print(f'En espera: {d[\"num_eventos_espera\"]}')
|
|
"
|
|
|
|
# Playlist pendiente (cuántos temas quedan)
|
|
wc -l ~/.gradio/data/tmp/playlist4
|
|
|
|
# Cola de comerciales activa
|
|
cat ~/.gradio/data/tmp/comercialeslist4
|
|
```
|
|
|
|
## Volumen
|
|
|
|
```bash
|
|
# Ver volumen actual
|
|
echo "Principal: $(cat ~/.gradio/data/tmp/upvol)%"
|
|
echo "Duck: $(cat ~/.gradio/data/tmp/downvol)%"
|
|
|
|
# Cambiar volumen principal a 85%
|
|
echo "85" > ~/.gradio/data/tmp/upvol
|
|
|
|
# Cambiar volumen duck a 20%
|
|
echo "20" > ~/.gradio/data/tmp/downvol
|
|
```
|
|
|
|
## Parrilla (programación)
|
|
|
|
```bash
|
|
# Ver qué suena ahora
|
|
HORA=$(date +%-H)
|
|
DIA=$(date +%u) # 1=Lun...7=Dom
|
|
echo "=== Parrilla actual: día $DIA, hora $HORA ==="
|
|
cat ~/.gradio/data/parrilla/$DIA/$HORA-$((HORA+1)).mus
|
|
|
|
# Agregar tema a la hora actual
|
|
echo "/ruta/nuevo_tema.mp3" >> ~/.gradio/data/parrilla/$DIA/$HORA-$((HORA+1)).mus
|
|
|
|
# Crear parrilla para todas las horas de un día (comodín)
|
|
for h in $(seq 0 23); do
|
|
mkdir -p ~/.gradio/data/parrilla/1
|
|
echo "/home/grecord/Musica/Variado/*" >> ~/.gradio/data/parrilla/1/$h-$((h+1)).mus
|
|
done
|
|
```
|
|
|
|
## Comerciales
|
|
|
|
```bash
|
|
# Agregar comercial a las 16:00 (todos los días, todo el año)
|
|
mkdir -p ~/.gradio/data/comerciales/16
|
|
echo "/ruta/spot.mp3|1234567|20250101|20261231" >> ~/.gradio/data/comerciales/16/0.com
|
|
|
|
# Ver tandas de la hora actual
|
|
HORA=$(date +%-H)
|
|
MIN=$(date +%-M)
|
|
ls ~/.gradio/data/comerciales/$HORA/
|
|
|
|
# Ver tandas ya reproducidas hoy
|
|
cat ~/.gradio/data/tmp/played_breaks
|
|
```
|
|
|
|
## Locución con IA
|
|
|
|
```bash
|
|
# Generar locución con voz clonada de Pato (requiere GPU NVIDIA)
|
|
locuta "Texto a locutar"
|
|
|
|
# Especificar nombre de archivo
|
|
cd ~/Dropbox/LocutorIA
|
|
./locucion_pato.sh "Texto a locutar" nombre_salida
|
|
|
|
# La locución se genera en:
|
|
# ~/Dropbox/LocutorIA/salida_mp3/locucion_AAAAMMDD_HHMMSS.mp3
|
|
# (o salida_mp3/nombre_salida.mp3 si se usó nombre personalizado)
|
|
|
|
# Copiar a la carpeta Time de G Radio Player para usar como locución de hora:
|
|
cp ~/Dropbox/LocutorIA/salida_mp3/locucion_*.mp3 ~/.gradio/data/panel/Time/
|
|
|
|
# O copiar a la carpeta de comerciales/eventos para pautar:
|
|
cp ~/Dropbox/LocutorIA/salida_mp3/mi_locucion.mp3 ~/.gradio/data/comerciales/15/
|
|
```
|
|
|
|
## Verificar daemons
|
|
|
|
```bash
|
|
# Ver si los daemons están corriendo
|
|
ps aux | grep -E 'comercial-scheduler|playlist-refill' | grep -v grep
|
|
|
|
# Verificar que el player está activo
|
|
ps aux | grep radio-player | grep -v grep
|
|
|
|
# Leer configuración actual
|
|
cat ~/.gradio/data/tmp/gradio.config
|
|
```
|
|
|
|
## Diagnóstico rápido
|
|
|
|
```bash
|
|
# Script de diagnóstico completo
|
|
echo "=== G-Radio Player — Estado ==="
|
|
echo ""
|
|
echo "Procesos:"
|
|
ps aux | grep -E 'radio-player|comercial-scheduler|playlist-refill' | grep -v grep
|
|
|
|
echo ""
|
|
echo "Reproducción:"
|
|
python3 -c "
|
|
import json, sys
|
|
try:
|
|
d = json.load(open('$HOME/.gradio/data/tmp/estado.json'))
|
|
print(f' Reproduciendo: {d[\"reproduciendo\"]}')
|
|
print(f' Tema: {d[\"titulo_actual\"]}')
|
|
print(f' Posición: {d[\"posicion_secs\"]:.0f}s / {d[\"duracion_secs\"]:.0f}s')
|
|
except: print(' (estado.json no disponible)')
|
|
"
|
|
|
|
echo ""
|
|
echo "Colas:"
|
|
echo " Música pendiente: $(wc -l < ~/.gradio/data/tmp/playlist4 2>/dev/null || echo 0) temas"
|
|
echo " Comerciales: $(wc -l < ~/.gradio/data/tmp/comercialeslist4 2>/dev/null | tr -d ' ') items"
|
|
echo " Eventos: $(wc -l < ~/.gradio/data/tmp/eventoslist 2>/dev/null | tr -d ' ') items"
|
|
echo " En espera: $(wc -l < ~/.gradio/data/tmp/eventos-esperalist 2>/dev/null | tr -d ' ') items"
|
|
```
|