7

我一直在Chrome(33及以上版本)中使用新的語音合成API來製作基於Web的通信輔助工具。我希望用戶能夠改變API允許我做的男性和女性之間的聲音。但是,當頁面首次加載並且首次運行該功能時(來自onclick事件),它將使用默認的女性聲音。然後任何時候它運行後,它會使用我嘗試使用的男性聲音。我怎樣才能讓男聲第一次運行呢?當函數運行超過1次時,爲什麼我的語音合成API語音會改變?

這裏是一個調用JavaScript按鈕:

<button type="button" name="speakMe"id="speakMe" onclick="speakPhrase($('phraseBar').getValue());" ><img src="images/speakMe.png" /></button> 

這裏是speakPhrase函數被調用:

function speakPhrase(phrase) { 
    if(phrase =="") 
    { 
     alert("Please enter a phrase before asking me to speak for you. Thank you!"); 
    } 
    else 
    { 
     var speech = new SpeechSynthesisUtterance(phrase); 
     var voices = window.speechSynthesis.getVoices(); 
     speech.voice = voices.filter(function(voice) { return voice.name == 'Google UK English Male'; })[0]; 
     window.speechSynthesis.speak(speech); 

    } 
} 

誰能幫助?

回答

0

通過一點好運氣的,我設法通過默認屬性設置爲false設置語音

function speakPhrase(phrase) { 
    if(phrase =="") 
    { 
     alert("Please enter a phrase before asking me to speak for you. Thank you!"); 
    } 
    else 
    { 
     var speech = new SpeechSynthesisUtterance(phrase); 
     var voices = window.speechSynthesis.getVoices(); 
     speech.default = false; 
     speech.voice = voices.filter(function(voice) { return voice.name == 'Google UK English Male'; })[0]; 
     speech.lang = 'en-GB'; //Also added as for some reason android devices used for testing loaded spanish language 
     window.speechSynthesis.speak(speech); 
    } 
} 
+0

同樣的問題。沒有爲我工作。 – agoldev

+0

如果您在第一次調用之後使用console.log語音,則很容易發現問題。 onVoices一旦真正可用,立即更新。 –

7

看來這個聲音陣列在第一次調用空之前解決這一問題。從我讀的內容來看,它與加載語音的異步調用有關。所以,它第一次被調用時總是空的。對我來說,這是神奇的:

var speech_voices; 
if ('speechSynthesis' in window) { 
    speech_voices = window.speechSynthesis.getVoices(); 
    window.speechSynthesis.onvoiceschanged = function() { 
    speech_voices = window.speechSynthesis.getVoices(); 
    }; 
} 

從你的語音功能以外的某個地方打來電話。

0

我解決了問題。

根本原因:當您首次調用API時,出於某種原因不會加載語音。第一次默認語音加載。

,所以我說下面的代碼行會在頁面加載或啓動或者是我的代碼會變得前準備狀態撥打:

voices = window.speechSynthesis.getVoices(); 

這解決了我的問題,希望幫助別人。

0

已更新的答案。這對我很有用。

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