diff --git a/modules/turnero/views/display_global.php b/modules/turnero/views/display_global.php index 5dadb56..c888903 100644 --- a/modules/turnero/views/display_global.php +++ b/modules/turnero/views/display_global.php @@ -495,16 +495,40 @@ function playBeep() { } catch (_) {} } -function anunciarTurno(codigo, destino) { +// Selección de voz española — cargada una vez, reutilizada en cada anuncio +let _vozES = null; +function getVozES() { + if (_vozES) return _vozES; + const voices = window.speechSynthesis.getVoices(); + // Preferencia: es-CO → es-419 → es-MX → es-US → es-ES → cualquier es-* + for (const lang of ['es-CO','es-419','es-MX','es-US','es-ES']) { + const v = voices.find(v => v.lang === lang); + if (v) { _vozES = v; return v; } + } + const v = voices.find(v => v.lang.startsWith('es')); + if (v) { _vozES = v; } + return _vozES; +} +if ('speechSynthesis' in window) { + window.speechSynthesis.onvoiceschanged = () => { _vozES = null; getVozES(); }; +} + +function anunciarTurno(codigo, destino, paciente) { playBeep(); if ('speechSynthesis' in window) { setTimeout(() => { window.speechSynthesis.cancel(); const letras = codigo.split('').join(' '); - const utt = new SpeechSynthesisUtterance(`Turno ${letras}, pase a ${destino}`); - utt.lang = 'es-CO'; utt.rate = 0.85; utt.pitch = 1.05; utt.volume = 1; + let texto = `Turno ${letras}`; + if (paciente) texto += `, ${paciente}`; + texto += `, pase a ${destino}`; + const utt = new SpeechSynthesisUtterance(texto); + utt.lang = 'es-CO'; + const voz = getVozES(); + if (voz) utt.voice = voz; + utt.rate = 0.85; utt.pitch = 1.05; utt.volume = 1; window.speechSynthesis.speak(utt); - }, 700); + }, 800); } } @@ -550,7 +574,7 @@ function showAnnouncement({ codigo, destino, paciente, color }) { ov.classList.add('visible'); - anunciarTurno(codigo, destino); + anunciarTurno(codigo, destino, paciente); bar.style.transition = 'none'; bar.style.width = '100%';