From db133d9b5d27e0d98b87530eacfe96c3bf334401 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 12 Aug 2026 06:38:06 -0500 Subject: [PATCH] =?UTF-8?q?Pantalla=20TV:=20el=20pito=20tapaba=20la=20prim?= =?UTF-8?q?era=20palabra,=20y=20p=C3=A1gina=20para=20elegir=20voz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El llamado se oía "entrecortado" por dos motivos distintos. playBeep() y speak() salían en el mismo instante, y el pito dura 0,65 s con volumen 0,35: "Turno A-01" se pronunciaba por debajo del tono y desde lejos parecía que el anuncio empezaba ya empezado. Se vuelve a esperar los 700 ms que el código tenía antes de que se quitaran. El otro motivo es la voz. getVozES() pide es-CO, que en Chrome es la de Google: remota. Cada llamado la baja de internet, así que con wifi flojo se corta o no suena. Las voces disponibles las decide el televisor, no el ERP, así que en vez de adivinar se agrega /erp.php?m=turnero&v=voces: lista las voces del equipo, marca cuáles son locales y cuáles se bajan de internet, señala la que está sonando hoy y deja oír cada una con el texto real de un llamado. Hay que abrirla en el televisor. Queda descartado el eco entre pantallas: hay un solo televisor con sonido. Co-Authored-By: Claude Opus 5 --- modules/turnero/views/display_global.php | 14 ++- modules/turnero/views/voces.php | 141 +++++++++++++++++++++++ 2 files changed, 149 insertions(+), 6 deletions(-) create mode 100644 modules/turnero/views/voces.php diff --git a/modules/turnero/views/display_global.php b/modules/turnero/views/display_global.php index 82840aa..9d0834a 100644 --- a/modules/turnero/views/display_global.php +++ b/modules/turnero/views/display_global.php @@ -588,15 +588,17 @@ function anunciarTurno(codigo, destino, paciente) { if (voz) utt.voice = voz; utt.rate = 0.95; utt.pitch = 1.05; utt.volume = 1; - // Con el sintetizador libre se habla de inmediato. Solo cuando hay algo en - // curso hace falta cancelar y esperar un instante: Chrome ignora un speak() - // encadenado a un cancel() en el mismo ciclo. + // Se espera a que el pito termine (dura 0,65 s) antes de hablar. Hablando + // encima, el tono tapaba "Turno X" y desde lejos parecía que el anuncio + // empezaba ya empezado. + const BEEP_MS = 700; + + // Solo cuando hay algo en curso hace falta cancelar: Chrome ignora un + // speak() encadenado a un cancel() en el mismo ciclo. if (window.speechSynthesis.speaking || window.speechSynthesis.pending) { window.speechSynthesis.cancel(); - setTimeout(() => window.speechSynthesis.speak(utt), 80); - } else { - window.speechSynthesis.speak(utt); } + setTimeout(() => window.speechSynthesis.speak(utt), BEEP_MS); return utt; } diff --git a/modules/turnero/views/voces.php b/modules/turnero/views/voces.php new file mode 100644 index 0000000..e88a345 --- /dev/null +++ b/modules/turnero/views/voces.php @@ -0,0 +1,141 @@ + + + + + + +Prueba de voces · Turnero + + + + +

Prueba de voces

+
Ábrala en el televisor: cada equipo ofrece voces distintas.
+ +
+ Las local salen del propio equipo: nunca se cortan, aunque suenen + algo más robóticas.
+ Las de internet suenan más naturales, pero se bajan de los + servidores de Google en cada llamado. Con wifi débil se entrecortan o no suenan. +

+ Oiga las que aparezcan y dígame cuál prefiere. +
+ +
Cargando voces…
+ + + + +