【问题标题】:Iterating through HTML5 audio files遍历 HTML5 音频文件
【发布时间】:2017-05-11 23:52:08
【问题描述】:

我的目标是遍历一个数组,取数组每个元素的值作为key 并播放与该值关联的声音剪辑。期望的最终结果是依次 按照数组中键的顺序播放声音片段。

这是我迄今为止尝试过的:

//there are addresses associated with the color sound values 

function playSound(soundValue){
  $sound.src = soundValue;
  $sound.load();
  $sound.play();
}

function playGame(){
  simonSays = [0,1,2,3];

  var soundOptions = {
    0: yellowSound,
    1: redSound,
    2: blueSound,
    3: greenSound 
  };

  for (var i = 0; i < simonSays.length; i++){
    var callSound = soundOptions[simonSays[i]];
    setTimeout(playSound(callSound),1000 );
  }
};

此代码遍历序列并等待setTimeout 持续时间 结束。我收到此错误:

 Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.
    playSound @ logic.js:72
    playGame @ logic.js:120
    onclick @ index.html:37

我的理解是音频文件相互干扰并产生 错误,但另外在通过允许的序列的迭代中没有延迟 每个文件完成。我看了these examples 推迟媒体执行的其他努力 但致电$sound.ended$sound.onended 都无法阻止 在音频文件完成之前迭代。该项目将增加数组的长度和顺序,所以我需要 某种方式来控制数组中每个成员的执行。

任何人都可以提供任何建议吗?谢谢你。

【问题讨论】:

    标签: javascript arrays html audio


    【解决方案1】:

    setTimeout 不会延迟循环。该循环使每个音频文件仅延迟一秒钟。解决方案是将循环放入一个函数中,如下所示:

    simonSays = [0,1,2,3];
    
    var soundOptions = {
      0: yellowSound,
      1: redSound,
      2: blueSound,
      3: greenSound 
    };
    
    function playGame(){
      startPlaying(0,simonSays.length);
    };
    
    function startPlaying(i,l) {
      if (i==l) return;
      var callSound = soundOptions[simonSays[i]];
      playSound(callSound);
      setTimeout("startPlaying("+(i+1)+","+l+")",1000);      
    }
    

    【讨论】:

    • 我真的很喜欢递归调用,但我仍然收到错误;当我将setTimeout 与调用设置为字符串时,它会产生此错误:Uncaught ReferenceError: i is not defined at &lt;anonymous&gt;:1:14 当我将startPlaying(i+1, l) 引用而不是字符串时,它会产生相同的效果,即在不调用音频文件的情况下在整个范围内循环,和原来的问题一样。有什么想法吗?感谢您的宝贵时间。
    • 我没有注意到这个问题。我已经编辑了我的帖子,让我知道它是否有效!我很难调试这种问题,因为很难重现您拥有的 html。
    • 完美!准确地编写函数调用是我的问题,确保字符串和数字的组合完美发送。这是一个很好的解决方案。感谢您的宝贵时间。
    猜你喜欢
    • 2016-06-27
    • 2015-07-29
    • 1970-01-01
    • 2013-05-01
    • 2014-11-02
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多