2017-03-25 85 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 } 
 
    } 
 
});

感谢您的帮助反正!

相关问题