0
我使用语音识别与我的麦克风,并具有中继回我speechSynthesis数据。变化speechSynthesis语音与语音识别
我所做的声音是一个女声在页面加载,并希望能够通过说“男声”,然后将接力“我现在是一个人”,切换到一个男性的声音。我后来也希望能够做相反的事情 - 当它设定为男性的声音时,说出“女性的声音”,然后切换回来。
我目前能做到这一点,但男声将只说了一次的声音不被保存,仅作为参数传递。因此,然后说出接下来的事情会回来的女声:
let voices = [];
window.speechSynthesis.onvoiceschanged = function() {
voices = window.speechSynthesis.getVoices();
};
function loadVoices(message, voice) {
const msg = new SpeechSynthesisUtterance();
msg.voice = voice || voices[48]; // female voice
msg.text = message;
speechSynthesis.speak(msg);
};
// asking for voice change here
if (transcript.includes('male voice')) {
let message = ('I am now a man');
let voice = voices[50]; // male voice
loadVoices(message, voice);
}
我想有一个全局变量,使得msg.voice
指向一个全局变量,但是,这并不工作,再加上声音将恢复为默认值(电子语音):
let voiceGender = voices[48];
function loadVoices(message) {
const msg = new SpeechSynthesisUtterance();
msg.voice = voiceGender // now a variable pointing to another.
msg.text = message;
speechSynthesis.speak(msg);
};
if (transcript.includes('male voice')) {
let message = ('I am now a man');
let voiceGender = voices[50]; // changing the global variable
loadVoices(message);
}
如果我声明voiceGender
的loadVoices()
内,然后我不能从if
这是另一个函数内变化。
如何设置的JavaScript结构,这样我可以做到这一点?
// on pageload the voice is set to a female voice
let femaleVoice = true;
function loadVoices(message) {
const msg = new SpeechSynthesisUtterance();
// checks the boolean
if (femaleVoice) {
msg.voice = voices[48];
} else {
msg.voice = voices[50];
}
msg.text = message;
speechSynthesis.speak(msg);
};
// changes the boolean/changes the gender of the SpeechSynthesisUtterance voice
function changeVoice() {
if (femaleVoice) {
femaleVoice = false;
} else {
femaleVoice = true;
}
}
if (transcript.includes('male voice') || transcript.includes('female voice')) {
// calls the function to change the boolean.
changeVoice();
let message = ('I now have a different voice');
loadVoices(message);
}
它确实增加了更多一点点线比原来想,但肯定的作品: