Arreglado el boton PARAR y repaso de portabilidad
PARAR no pausaba de verdad: el HUD estaba entero para el estado "parado" pero el backend nunca mandaba el campo "parar" en el evento controles, asi que el boton no alternaba ni pausaba la escucha. Ahora pausa (el bucle de escucha descarta el audio en pausa) y alterna a "reanudar". Portabilidad (para que encaje en otros portatiles y torres, no solo en el equipo del autor): - microfono: pw-record / parec / arecord (PipeWire, PulseAudio o ALSA) - whisper: binario del build local o del PATH; modelos por JARVIS_WHISPER_MODELOS o busqueda en varios sitios; CUDA en LD_LIBRARY_PATH solo si existe - README: la tabla de portabilidad refleja audio y whisper
This commit is contained in:
parent
55e967b940
commit
a0b9afe2f9
5 changed files with 102 additions and 23 deletions
|
|
@ -220,6 +220,11 @@ class Panel:
|
|||
self.telemetria = Telemetria()
|
||||
self._parar = threading.Event()
|
||||
|
||||
# Pausa a peticion del usuario (boton PARAR): mientras esta puesta, el
|
||||
# bucle de escucha ignora lo que oiga. Distinto de self._parar, que corta
|
||||
# los HILOS del panel al cerrar. Lo lee jarvis.py en cada frase.
|
||||
self.parado = False
|
||||
|
||||
# Las tarjetas: una por orden en marcha, con su reloj y su boton de
|
||||
# parar. El prefijo va vacio porque aqui ya estamos en el host; dentro
|
||||
# del flatpak era `flatpak-spawn --host --watch-bus`.
|
||||
|
|
@ -317,6 +322,10 @@ class Panel:
|
|||
self.cara.manda("controles", {
|
||||
# encendido = atiende todo; apagado = solo si le llaman
|
||||
"sueno": not (self.centinela and self.centinela.activo),
|
||||
# encendido = escuchando; apagado = en pausa (boton PARAR). Sin este
|
||||
# campo el HUD no sabe alternar el boton a "reanudar" ni marcar el
|
||||
# documento como "parado", y el boton parece que no hace nada.
|
||||
"parar": not self.parado,
|
||||
})
|
||||
|
||||
def estado(self, cual: str):
|
||||
|
|
@ -404,13 +413,24 @@ class Panel:
|
|||
self.estado("escuchando" if not self.centinela.activo else "dormido")
|
||||
|
||||
elif dato.startswith("parar"):
|
||||
# Cortar lo que este pasando AHORA: las tareas en marcha y la voz.
|
||||
n = 0
|
||||
for t in self.tareas.todas():
|
||||
if t.estado == "corriendo" and self.tareas.para(t.id):
|
||||
n += 1
|
||||
self.boca.di_si_libre(f"Cortadas {n} tareas, señor." if n
|
||||
else "No habia nada corriendo, señor.")
|
||||
# El boton alterna PAUSA. No es solo "cortar lo de ahora": el titulo
|
||||
# promete "cierra el microfono y corta la voz; pulsa otra vez para
|
||||
# reanudar", asi que tiene que ALTERNAR y avisar al HUD de como quedo,
|
||||
# que es lo que hacia que pareciera que no funcionaba.
|
||||
self.parado = not self.parado
|
||||
if self.parado:
|
||||
# cortar lo que este corriendo; la escucha la ignora jarvis.py
|
||||
# mirando self.parado en cada frase. Pausa en silencio: si el
|
||||
# usuario pulsa PARAR es para que se calle, no para que hable.
|
||||
for t in self.tareas.todas():
|
||||
if t.estado == "corriendo":
|
||||
self.tareas.para(t.id)
|
||||
self.estado("parado")
|
||||
else:
|
||||
self.boca.di_si_libre("A sus órdenes, señor.")
|
||||
self.estado("escuchando")
|
||||
# el HUD alterna el boton y marca el documento SOLO con esto
|
||||
self.manda_controles()
|
||||
|
||||
# Cuanto se espera la respuesta a una pregunta antes de darla por olvidada.
|
||||
# Corto cansa —hay que pensar que fichero era—; largo hace que una frase
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue