Files
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

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"
```