【问题标题】:HTML5 audio: trying to make a queueHTML5 音频:尝试排队
【发布时间】:2015-08-05 13:11:18
【问题描述】:

我正在开发一个使用 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)};
}

【问题讨论】:

    标签: javascript html audio queue


    【解决方案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);
        //  ^^^^^^^^^
        };
    }
    

    【讨论】:

      【解决方案2】:

      没关系!让它使用

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

      代替var z = q.shift();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        • 2017-03-05
        • 2013-11-04
        • 2011-07-15
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多