javascript - 如何将默认的美国男性声音更改为英国女性或其他
问题描述
const btn = document.querySelector('.talk');
const content = document.querySelector('.content');
const greetings = [
'If you are good im good to ',
'Im doin alright',
'Im tired '
];
const weather = [
'Ask the weatherman!',
'I recommend checking your phone or the news '
];
const name = [
'My name is techwaala',
'its techwaala, because I love to code!'
];
const hello = [
'Why hello! How are you doing today?',
'Hey there How are you?'
]
const hru = [
'thats great!',
'Im so sorry to hear that',
'Feel better soon!'
]
const SpeechRecognition =
window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
recognition.onstart = function() {
console.log('voice is activated speak into the mic');
};
recognition.onresult = function(event) {
const current = event.resultIndex;
const transcript = event.results[current][0].transcript;
content.textContent = transcript;
readOutLoud(transcript);
}
btn.addEventListener('click', () => {
recognition.start();
});
function readOutLoud(message) {
const speech = new SpeechSynthesisUtterance();
speech.text = 'I dont know what you said';
if(message.includes('how are you')) {
const finalText =
greetings[Math.floor(Math.random() * greetings.length)];
speech.text = finalText;
}
if(['hey', 'hi', 'hello', 'hi there', 'hey there', 'hi techwala', 'hey techwala','hello techwala']
.some(word => message.includes(word))) {
const finalText = hello[Math.floor(Math.random() * hello.length)];
speech.text = finalText;
}
if(['whats your name', 'your name']
.some(word => message.includes(word))) {
const finalText = name[Math.floor(Math.random() * name.length)];
speech.text = finalText;
}
if(['how\'s the weather', 'what\'s the weather like', 'is it sunny', 'is it raining', 'is it cloudy', 'is it snowing']
.some(word => message.includes(word))) {
const finalText = weather[Math.floor(Math.random() * weather.length)];
speech.text = finalText;
}
speech.volume = 1;
speech.rate = 1;
speech.pitch = 1;
window.speechSynthesis.speak(speech);
}
我正在开发一个网页,当你说话时会说话。它的默认设置是用美国男性说话,但如果我想将口音更改为英国女性或法国男性怎么办?我尝试使用响应式voice.org,但这对我不起作用。我该怎么做?此外,我没有将 HTML 插入此代码段,因为我认为 JavaScript 将是唯一需要查看的内容。
解决方案
利用speechSynthesis
文档中有一个很好的例子,但如果你要对声音进行硬编码,基本上是这样的:
var synth = window.speechSynthesis;
// get voices
var voices = synth.getVoices();
// when voices have finished loading
synth.onvoiceschanged = function() {
var sayThis = new SpeechSynthesisUtterance('Hi how are you?');
sayThis.onend = function(event) {
console.log('SpeechSynthesisUtterance.onend');
}
sayThis.onerror = function(event) {
console.error('SpeechSynthesisUtterance.onerror');
}
var selectedVoice = 'Google UK English Female';
for (var i = 0; i < voices.length; i++) {
if (voices[i].name === selectedVoice) {
sayThis.voice = voices[i];
break;
}
}
sayThis.pitch = 1;
sayThis.rate = 1;
synth.speak(sayThis);
}
推荐阅读
- android - 如果我未满 18 岁,我可以创建一个谷歌开发者帐户吗?
- neo4j - 图嵌入算法是否适用于英语以外的其他语言?
- ruby-on-rails - 如何配置 NGINX 以在 Ruby on rails 应用程序中接收 smtp 电子邮件?
- javascript - 渲染后状态设置为初始值
- mysql - 使用while循环等待回调时未执行NodeJS Mysql异步查询
- java - 如何根据JAVA中存在的整数值对字符串进行排序
- python - Python/Flask/SQLite - 没有 SQLAlchemy 的带有下一个/上一个按钮的分页和导航
- flutter - 如何将音频的 StreamedResponse 保存到 Flutter 中的文件?
- javascript - $scope 变量不加载值
- azure-devops - Azure DevOps PR 管道中的 SonarCloud 分析任务失败