2017-08-31 19 views
0

私のマイクでSpeechRecognitionを使用していて、speechSynthesisでデータが返されています。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ポイントそのグローバル変数を持ってみましたが、これは動作しません、プラスの声が(デフォルトに戻ります電子声):私はloadVoices()voiceGender内部を宣言した場合

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); 
    } 

、その後、私は別の関数内にあるifからそれを変更することはできません。

これを実現するにはどうすればJavascript構造を設定できますか?

答えて

1

私はそのようなことをloadVoices機能で条件文で機能し、ブール値を追加することによってそれを解決:それは元々望んでいたよりもほんの少し多くの行を追加していますが、間違いなく動作します

// 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); 
} 

関連する問題