2017-05-31 37 views
0

我想從幾天後的時間裏創建一個類似GoBarbara.com的頁面。 有一個文本字段的內容將從文本到語音轉換。SpeechSynthesis - 在講話結束之前發生的一次火災

因此,我想使用SpeechSynthesis API(javaScript),它會在觸發intro.mp3之後進行文本發言。播放完演講後,應播放end.mp3。 這是由事件監聽器處理intro.mp3結尾處的「onend」類型和語音。

播放音頻的基本觸發方案是1→2→3. 其中1是intro.mp3,2是語音,3是end.mp3。

我當前的代碼如下:

function doSpeech() { 
    var speech = new SpeechSynthesisUtterance(); 
    speech.text = getText(); 
    speech.lang = "en-US"; 
    speech.voice = speechSynthesis.getVoices().filter(function(voice) {return voice.name == 'Google UK English Male'; })[0];  
    speechSynthesis.speak(speech); 
    speech.onend = playEnd(); 
} 

要觸發end.mp3,我想用SpeechSynthesis擁有onend事件。 但是在實際的演講結束之前,一個人會發出結尾.mp3!?

看來這可能是一個錯誤。但除此之外,如何在正文結束之前將文本正確啓動?注意:語音部分的長度可能不同。

+1

之前,我不得不借助onStart類似的問題這是通過反轉事件和說話線解決 - 嘗試? – Frazer

回答

1

正確的代碼是

function doSpeech() { 
    var speech = new SpeechSynthesisUtterance(); 
    speech.text = getText(); 
    speech.lang = "en-US"; 
    speech.voice = speechSynthesis.getVoices().filter(function(voice) {return voice.name == 'Google UK English Male'; })[0];  
    speech.onend = playEnd(); 
    speechSynthesis.speak(speech); 
} 

onendspeak

+0

嘿尼古拉,我嘗試過,但不幸的是,當使用更長的字符串時,我得到了語音和mp3開始的重疊... – Kaibear