2017-03-25 128 views
0

我正在嘗試編寫一個程序,該程序將帶一個句子並播放每個單詞的聲音片段。我對於stackoverflow和javascript/html很新,所以我很抱歉,這種格式是垃圾。我遇到了單詞一起播放的問題,爲了解決這個問題,我添加了一個.onended(),但是這隻能修復前兩個單詞,並且使用循環無法工作。感謝您的任何幫助。這是我目前:一個接一個地播放音頻

<body> 
 
What would you like me to say? 
 
<input type="text" id="words"/> 
 
<script> 
 
document.getElementById('words').addEventListener('keypress', function (e) { 
 
    if (e.which === 13) { 
 
\t \t var sentence = document.getElementById("words").value; 
 
\t \t var splitted = sentence.split(" "); 
 
\t \t var length = splitted.length; 
 
\t \t var i = 1; 
 
\t \t var sp = new Audio (splitted[0] + '.m4a'); 
 
\t \t sp.play(); 
 
\t \t sp.onended=function(){ 
 
\t \t \t if(i<length){ 
 
\t \t \t var sp = new Audio (splitted[i] + '.m4a'); 
 
\t \t \t sp.play(); 
 
\t \t \t i++; 
 
\t \t \t } 
 
\t \t } 
 
    } 
 
});

而這就是我收到了,當我循環所有這些,他們都一起玩:

for(i=0;i<length;i++){ 
 
var sp = new Audio(splitted[i] + 'm4a'); 
 
sp.play(); 
 
}

+0

只是檢查。 Java是否涉及?或者這是所有的JavaScript。如果沒有Java,則可以像Java語言那樣刪除javasound標記。 –

回答

0

當您爲下一個單詞創建音頻時,var sp = new Audio (splitted[i] + '.m4a'),一個新的單詞tine音頻實例已創建。因此,第二個單詞不具有.onended處理程序集。這就是爲什麼它只播放前兩個單詞。

要解決此問題,您必須爲您創建的每個音頻添加一個ended偵聽器。

+0

我不太明白你的意思,你能否詳細說明或舉個例子?是否必須手動完成? – Suoria

+0

你的答案就是我的意思。每次你創建一個新的音頻('var sp = new Audio(...)')時,你必須正確設置一個'onended'監聽器。 :) – Thai

0

如果我是對的,你正在尋找文字演講。然後讓我建議你responsiveVoiceJS。這個JavaScript庫可以從您的輸入字段獲取數據,並可以將其轉換爲語音,而無需爲每個音節創建單獨的語音。這是簡單的方法。

資源:responsivevoice.org

+0

但是,我想用我的聲音。對不起,如果不清楚。 – Suoria

0

我已經找到了解決使用遞歸函數:

document.getElementById('words').addEventListener('keypress', function (e) { 
 
    if (e.which === 13) { 
 
\t \t var sentence = document.getElementById("words").value; 
 
\t \t var splitted = sentence.split(" "); 
 
\t \t var length = splitted.length; 
 
\t \t var i = 0; 
 
\t \t testFunction(); 
 
\t \t function testFunction(){ 
 
\t \t \t if(i<length){ 
 
\t \t \t \t var sp = new Audio (splitted[i] + '.m4a'); 
 
\t \t \t \t sp.play(); 
 
\t \t \t \t i++; 
 
\t \t \t \t sp.onended=function(){ 
 
\t \t \t \t \t testFunction(); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
    } 
 
});

感謝您的幫助反正!

相關問題