Я использую SpeechRecognition со своим микрофоном и получаю данные, переданные мне с помощью 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, чтобы добиться этого?