一个接一个地播放音频
问题描述:
我正在尝试编写一个程序,该程序将带一个句子并播放每个单词的声音片段。我对于*和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();
}
答
如果我是对的,你正在寻找文字演讲。然后让我建议你responsiveVoiceJS。这个JavaScript库可以从您的输入字段获取数据,并可以将其转换为语音,而无需为每个音节创建单独的语音。这是简单的方法。
资源:responsivevoice.org
+0
但是,我想用我的声音。对不起,如果不清楚。 – Suoria
答
我已经找到了解决使用递归函数:
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 }
}
});
感谢您的帮助反正!
只是检查。 Java是否涉及?或者这是所有的JavaScript。如果没有Java,则可以像Java语言那样删除javasound标记。 –