2015-11-24 220 views
1

我有一個腳本正確運行在windows上的chrome,但是當我在我的android chrome上嘗試它時,它不起作用。 這似乎是聲音的問題,因爲:在chrome中的語音合成爲android不加載聲音

if ('speechSynthesis' in window) 

返回true。 我嘗試了一些在線示例(例如http://codepen.io/matt-west/pen/wGzuJ),並且「聲音」選擇列表爲空。

我需要安裝一些東西來完成這項工作嗎?

這個代碼在Chrome瀏覽器窗口,但不會在Android版Chrome:

function playSentence(text) {  
    var msg = new SpeechSynthesisUtterance();  
    msg.text = text; 
    window.speechSynthesis.speak(msg); 
} 

$(function() { 
    playSentence("Hello world"); 
}); 

版本:Android的5.0.0 - 鉻46.0.2490.76

回答

0

有兩個問題

1)在手機上,你需要一個用戶手勢來開始播放文本。將它添加到一個onclick處理程序請參見下面的demo

<body> 
    <button id="btnPlay">Play</button> 
    <script> 
    function playSentence(text) {  
     var msg = new SpeechSynthesisUtterance();  
     msg.text = text; 
     window.speechSynthesis.speak(msg); 
    } 

    $("#btnPlay").click(function() { 
     playSentence("Hello world"); 
    }); 
</script> 

</body> 

2)該演示也斷:\但也有您需要照顧的兩個關鍵部分。

i。 getVoices是asynchronus(在Spec勘誤中提到),你需要聽voiceschanged event,推理有點令人沮喪,但是有道理,語音系統被延遲加載,並且第一次調用getVoices將阻止主線程,所以第一次調用在android上返回0結果,然後在聲音可用時觸發onvoiceschanged

ii。 linked demo錯誤地在話語上設置voice屬性。這不存在,您需要更改lang和可選的voiceURI以更改默認使用的語音,如下面和new demo中所示。

if (voiceSelect.value) { 
    var selectedVoice = speechSynthesis.getVoices().filter(function(voice) { return voice.voiceURI == voiceSelect.value; })[0]; 

    msg.voiceURI = selectedVoice.voiceURI; 
    msg.lang = selectedVoice.lang; 

} 
+0

感謝您抽出時間回覆。問題是在該設備中沒有安裝聲音(我不知道爲什麼,我不知道它是否是一個常見問題)。我在android中安裝了一個TTS程序,之後問題解決了。 無論如何,正如你所說的顯然是話語的「聲音」屬性沒有效果,我不得不改變「郎」屬性。我認爲解決了這個問題。我會進一步測試,然後編輯我的原始問題。 謝謝! – user3192301