el problema Tengo una implementación de JavaScript de texto a voz (usando la biblioteca SpeechSynthesisUtterance) que funciona en ese texto que se habla.
El principal problema es que cuando se llama a la función de hablar después de que se cumple una condición inicial (la condición es que el usuario levante los brazos en una transmisión de cámara en vivo), el TTS repite la variable de voz demasiadas veces, independientemente del valor de "retraso". nos alimentamos.
La función de 'hablar' que se llama cada vez que se utiliza TTS se muestra a continuación. La función de condición llama a hablar correctamente siempre que sea Verdadero.
He probado casi todos los métodos con respecto a establecer un contexto para que no se repita cuando la condición se cumple una vez dentro de una ventana de diez segundos. Llamar a tts.cancel() tampoco parece tener efecto.
Tengo el presentimiento de que debido a que la función de procesamiento de la cámara se llama con tantos fotogramas por segundo, la cola de declaraciones se llena de muchas solicitudes. Al mismo tiempo, quiero que TTS se active solo una vez cuando la condición llama a hablar por primera vez.
Cualquier ayuda es muy apreciada y se puede proporcionar una aclaración. Cualquier referencia a funciones o conceptos útiles también sería genial. ¡Disculpas por el código de principiante!
var voice= window.speechSynthesis; var tts = new SpeechSynthesisUtterance(); function speaking(speech, delayer) { let sleep = (ms) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; console.log("Speaking"); if (!voice.speaking) { tts.text = speech; voice.speak(tts); sleep(delayer); clearTimeout(timerOut); return; if (voice.speaking) { voice.cancel(); return; } } return; }aquí hay una versión más simple
function speaking(speech, delayer) { if (delayer === void 0) { delayer = 0; } if (speech.length > 0) { setTimeout(function () { var utterThis = new SpeechSynthesisUtterance(speech); utterThis.rate = 1; utterThis.pitch = 1; window.speechSynthesis.speak(utterThis); }, delayer); } }