在JavaScript中自动进行文本到语音转换

ocebsuys  于 2023-01-24  发布在  Java
关注(0)|答案(3)|浏览(149)

在JavaScript中,我可以在onload或onclick调用的函数中实现实验性的文本到语音的转换。当在间隔计时器中时,它不工作。我想这与在中断计时器中设置中断有关。对于如何每分钟都能有一次语音消息,有什么建议吗?
我使用的测试是var speech = new语音合成语句(“hello world”);窗口。语音合成。speak(语音);
我承认这个功能只适用于某些浏览器和设备,是实验性的,但也被广泛使用。
我正在尝试为监控应用程序每分钟提供一次自动语音状态报告

1tuwyuhd

1tuwyuhd1#

实际上,你可以用setInterval来做这件事,见下面的例子。

var messages = ['Hello', 'world', 'It\'s me', 'Good day','How are you?','Download complete'];
var frequency = 3000;

var myInterval = setInterval(speak,frequency);

function speak() {
  let rand = Math.floor(Math.random() * (messages.length-1));
  console.log(rand);
  let speech = new SpeechSynthesisUtterance(messages[rand]);
  window.speechSynthesis.speak(speech);
}

我只是从一个数组中随机选取单词,每3秒钟说出一次,你可以根据需要调整提供的代码(每分钟说出一次你的状态)。

afdcj2ne

afdcj2ne2#

Intervals与speechSynthesis API配合得很好,下面是一个工作示例:

speech = new SpeechSynthesisUtterance("hello world");
// say "hello world" every 5 seconds
setInterval(() => window.speechSynthesis.speak(speech), 5000)

如果你想检查你的监控更新之前的“文本speach”你可以建立这样的东西:

setInterval(() => {
  // Perform some calucation about the current status ...
  status = getStatusUpdateAsString();
  
  // Prepare speech
  speech = new SpeechSynthesisUtterance(status);

  window.speechSynthesis.speak(speech);
}, 5000)
6bc51xsx

6bc51xsx3#

下面是一个使用SpeechSynthesisUtteranceend事件、AbortControllersetTimeout来自动化计数器的示例。您应该能够根据自己的特定需要进行调整:

let count = 1
let controller = new AbortController()
const synth = window.speechSynthesis
const utter = new SpeechSynthesisUtterance(count)
const text = document.getElementById('text')
const onUtterEnd = () => {
  setTimeout(() => {
    count = count + 1
    utter.text = count
    text.innerHTML = `<mark>${count}</mark>`
    synth.speak(utter)
  }, [500])
}
const start = () => {
  text.innerHTML = `<mark>${count}</mark>`
  controller = new AbortController()
  utter.addEventListener('end', onUtterEnd, { signal: controller.signal })
  synth.speak(utter)
}
const stop = () => {
  controller.abort()
  synth.cancel()
}

document.getElementById('start').addEventListener('click', start)
document.getElementById('stop').addEventListener('click', stop)
<button id="start">start</button>
<button id="stop">stop</button>
<p id="text"></p>

如果你使用的是React,请查看tts-react以获得自定义控件或钩子。

相关问题