我目前正在try 在speechSynthesis中设置特定的语音,我做到了,但我现在面临的问题是,每当我触发语音时,在我的情况下,我使用一个按钮,当我第一次点击按钮时,它会触发我放在那里的lang的语音,也就是en-GB, Select 的语音只会在第二次点击时生效.我只想要一个声音来工作,这是我从getVoices中 Select 的一个.你可以try 下面的代码来理解我的意思,谢谢!

function speakTTS() {
  const voices = window.speechSynthesis.getVoices();
  const message = new SpeechSynthesisUtterance();
  message.text = "Please get me a bottle of water, thank you.";
  message.volume = 1; // Volume range = 0 - 1
  message.rate = 1.1; // Speed of the text read , default 1
  message.voice = voices[9]; // change voice
  message.lang = 'en-GB'; // Language, default 'en-US'
  window.speechSynthesis.speak(message);
  console.log(window.speechSynthesis.getVoices());
}
<button onClick=speakTTS()>Speak</button>

推荐答案

我们可以使用On VoicesChanged事件侦听器.当声音完全加载时,它将启动.

let voices

window.speechSynthesis.onvoiceschanged = function() {
  voices = window.speechSynthesis.getVoices();
};

function speakTTS() {
  const message = new SpeechSynthesisUtterance();
  message.text = "Please get me a bottle of water, thank you.";
  message.volume = 1; // Volume range = 0 - 1
  message.rate = 1.1; // Speed of the text read , default 1
  message.voice = voices[9]; // change voice
  message.lang = 'en-GB'; // Language, default 'en-US'
  window.speechSynthesis.speak(message);
  console.log(voices);
}
<button onClick=speakTTS()>Speak</button>

Javascript相关问答推荐

*ngFor和@代表输入decorator 和选角闭合

是什么原因导致此Angular 16电影应用程序中因类型错误而不存在属性?

对象和数字减法会抵消浏览器js中的数字

使用TMS Web Core中的HTML模板中的参数调用过程

Phaser框架-将子对象附加到Actor

提交表格后保留Web表格中的收件箱值?

通过嵌套模型对象进行Mongoose搜索

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

Javascript json定制

ChartJs未呈现

JQuery Click事件不适用于动态创建的按钮

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

如何确保预订系统跨不同时区的日期时间处理一致?

Phaserjs-创建带有层纹理的精灵层以自定义外观

如何访问此数组中的值?

如何组合Multer上传?

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

如何创建一个for循环,用于计算仪器刻度长度并将其放入一个HTML表中?

在Reaction Native中,ScrolltoIndex在结束时不一致地返回到索引0