-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCH9_monitor.sh
More file actions
executable file
·115 lines (86 loc) · 4.5 KB
/
CH9_monitor.sh
File metadata and controls
executable file
·115 lines (86 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash
# ==============================================================================
# SCRIPT: CH9_monitor.sh - MODO 3: Monitor CB (SOLO GRABACIÓN)
# ==============================================================================
# 2. CARGA DE CONFIGURACIÓN
source $HOME/.CH9-config
# 3. DEFINICIÓN DE VARIABLES INICIALES
ENABLE=1
RAMDISK=/dev/shm
USER=$(whoami)
DEBUG=0
# 4. VARIABLE DE LOG
LOG_FILE="$HOME/ch9_monitor.log"
touch "$LOG_FILE"
# 5. PREPARACIÓN DEL ENTORNO DE GRABACIÓN
# CRÍTICO: El subdirectorio 'vox' se usa para almacenar el audio temporalmente.
mkdir -p $RAMDISK/$USER/vox
rm $RAMDISK/$USER/audio*.wav 2>/dev/null
# ------------------------------------------------------------------------------
# 🚨 LANZAMIENTO DEL PROCESO ASÍNCRONO DE WHISPER
# ------------------------------------------------------------------------------
WHISPER_SCRIPT="$HOME/.local/bin/CH9_whisper.sh"
echo "--- Iniciando Monitor de Transcripción (CH9_whisper.sh) en segundo plano ---"
if [ -f "$WHISPER_SCRIPT" ]; then
# Lanzamos el script de Whisper en segundo plano, pasándole nuestro PID ($$)
"$WHISPER_SCRIPT" "$$" &
WHISPER_PID=$!
echo "INFO: CH9_whisper.sh lanzado con PID: $WHISPER_PID. Seguirá activo hasta terminar el trabajo."
else
echo "🚨 ERROR: $WHISPER_SCRIPT no encontrado. El audio NO se transcribirá."
fi
# ------------------------------------------------------------------------------
# 6. BUCLE PRINCIPAL DE MONITOREO (VOX Loop)
DURATION=$(echo "($MinMexDuration * 1000000)/1" | bc) #"
while true; do
# 6.1. ESTADO DEL SISTEMA
if [ "$DEBUG" = 0 ]; then clear; fi
echo "monitoring (Modo Monitor CB/SOLO GRABACIÓN)... PID de Monitor: $$"
echo "
########################################################
# MODO MONITOR CB - ENABLE=$ENABLE
########################################################"
echo "--- Últimos 5 Mensajes Registrados ---"
tail -n 5 "$LOG_FILE"
echo "--------------------------------------"
# 6.2. COMANDO CRÍTICO DE SQUELCH (TRIPLE PIPE)
AUDIODRIVER=$AUDIODRIVER AUDIODEV=$AUDIODEV rec -V0 -r $FREQ -e signed-integer -b 16 -c 1 --endian little -p | sox -p -p silence 0 1 0:$TIME 10% | sox -p -r $FREQ -e signed-integer -b 16 -c 1 --endian little $RAMDISK/$USER/audio.wav compand 0.3,1 6:-70,-60,-20 -5 -90 0.2 silence 0 1 0:02 10% : newfile
# 6.3. PROCESAMIENTO POST-GRABACIÓN
ls $RAMDISK/$USER/*.wav > $RAMDISK/$USER/list.log
du $RAMDISK/$USER/*.wav >> $RAMDISK/$USER/size.log
for audio in $(cat $RAMDISK/$USER/list.log); do
size=$(cat "$audio" | wc -l) # Citamos $audio
if [ "$size" == "0" ]; then # Citamos $size
echo "$audio file empty"
rm "$audio"
else
size2=$(ffprobe -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$audio" 2>/dev/null | tr -d '.')
if [ "$size2" -lt "$DURATION" ]; then
echo "$audio file too short"
rm -f "$audio"
else
# 6.4. LÓGICA DE GRABACIÓN Y ALMACENAMIENTO
if [ "$ENABLE" = 1 ]; then
# PASO CRÍTICO: Renombrar el archivo de audio con un sello de tiempo y mover.
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
NEW_AUDIO="$RAMDISK/$USER/vox/${TIMESTAMP}.wav"
echo "INFO: Audio grabado ($audio). Renombrando a $NEW_AUDIO para Transcripción Asíncrona..."
# Movimiento/Renombre al directorio 'vox' donde CH9_whisper lo espera
mv "$audio" "$NEW_AUDIO" || { echo "ERROR: No se pudo mover/renombrar el archivo de audio. Se queda en $audio."; continue; }
MexDuration=$(echo "( $size2 / 1000000 )*1" | bc) #"
LOG_ENTRY="$(date '+%Y-%m-%d %H:%M:%S') - AUDIO GRABADO ($MexDuration s) - $NEW_AUDIO"
echo "$LOG_ENTRY" >> "$LOG_FILE"
echo "INFO: Audio listo para CH9_whisper en $NEW_AUDIO."
else
# Limpiar el archivo WAV si el monitoreo está deshabilitado
rm -f "$audio" 2>/dev/null
fi
fi
fi
done
# 6.5. LIMPIEZA Y PAUSA DEL BUCLE
sleep 0.3
:> $RAMDISK/$USER/size.log
done
# Al salir (p. ej. Ctrl+C), simplemente se sale. El proceso hijo CH9_whisper.sh
# debe gestionar su propia finalización.