HTML5音频:尝试建立队列

时间:2015-08-05 13:11:18

标签: javascript html5 audio queue

我正在使用JavaScript和html5音频元素处理文本到语音转换器。我们的想法是将一串IPA(国际音标)转换为声音。所以在函数talk()中,我取出字符串并将其拆分。然后我将相应的声音放入queue,我尝试使用playQ(q)函数。

但是这个功能似乎不起作用。我只能让它播放第一个声音。所以q[0].play;正在运行,但playQ(q)函数的其余部分却没有。

我认为这是因为q.shift()方法,但我也尝试了q[1:],或者因为递归。

function talk(){
    var queue = []
    var str = document.IPATTS.phonetic.value
    var letters = str.split("")
    for (x in letters) {
        queue.push(document.getElementById(letters[x]))
    }
    playQ(queue);
}

function playQ(q){
    q[0].play();
    var z = q.shift();
    q[0].onended = function() {playQ(z)};
}

2 个答案:

答案 0 :(得分:1)

如上所述here

  

shift()方法从数组中删除第一个元素并返回该元素。此方法更改数组的长度。

因此,使用var z = q.shift()分配z = q[0] 此外,q[0]q.shift()

之前和之后会有不同的值

我认为这应该有效:

function playQ(q){
    q[0].play();
    q[0].onended = function() {
        q.shift();
        playQ(q);
    //  ^^^^^^^^^
    };
}

答案 1 :(得分:0)

没关系!用它来工作

var z = []
for (x in q) {
    if (x > 0) {
        z.push(q[x])
    }
}

代替var z = q.shift();