Locuciones de radio con voz IA local (XTTS-v2) integradas a G Radio Player: interfaz Rust/GTK4 de configuración, motor de generación y enriquecimiento de texto en Python, daemon de monitoreo que dispara locuciones sin pausar playlist-refill. Requiere radio-player >= 0.4.11.
55 lines
1.6 KiB
Bash
55 lines
1.6 KiB
Bash
#!/bin/bash
|
|
# Inicia/detiene el monitor de locuciones (gr-locutor)
|
|
# Uso: start-monitor.sh [start|stop|status]
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PIDFILE="$HOME/.gradio/data/tmp/pids/locuciones-monitor.pid"
|
|
MONITOR="$SCRIPT_DIR/monitor-locuciones.py"
|
|
LOCUTOR_VENV="$HOME/.gradio/locutor-venv"
|
|
|
|
case "${1:-start}" in
|
|
start)
|
|
if [ -f "$PIDFILE" ]; then
|
|
pid=$(cat "$PIDFILE" 2>/dev/null)
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
echo "Monitor ya está corriendo (PID $pid)"
|
|
exit 0
|
|
fi
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
mkdir -p "$(dirname "$PIDFILE")"
|
|
# shellcheck source=/dev/null
|
|
source "$LOCUTOR_VENV/bin/activate"
|
|
nohup python3 "$MONITOR" > "$HOME/.gradio/data/tmp/locuciones-monitor.log" 2>&1 &
|
|
echo $! > "$PIDFILE"
|
|
echo "Monitor de locuciones iniciado (PID $!)"
|
|
;;
|
|
stop)
|
|
if [ -f "$PIDFILE" ]; then
|
|
pid=$(cat "$PIDFILE" 2>/dev/null)
|
|
kill "$pid" 2>/dev/null && echo "Monitor detenido" || echo "No se pudo detener"
|
|
rm -f "$PIDFILE"
|
|
else
|
|
pkill -f "monitor-locuciones.py" 2>/dev/null && echo "Monitor detenido" || echo "Monitor no estaba corriendo"
|
|
fi
|
|
;;
|
|
status)
|
|
if [ -f "$PIDFILE" ]; then
|
|
pid=$(cat "$PIDFILE" 2>/dev/null)
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
echo "Monitor ACTIVO (PID $pid)"
|
|
tail -3 "$HOME/.gradio/data/tmp/locuciones-monitor.log" 2>/dev/null
|
|
else
|
|
echo "Monitor INACTIVO (PID file obsoleto)"
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
else
|
|
echo "Monitor INACTIVO"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Uso: $0 [start|stop|status]"
|
|
exit 1
|
|
;;
|
|
esac
|