Javascript和HTML5循环问题

时间:2015-01-26 03:53:28

标签: javascript html5 getusermedia

我正在尝试在HTML5中创建一个简单的循环录制程序。我已经完成了一些基础知识,但我现在遇到的问题是,当我尝试以递归方式播放音频时,它会在音频结束之前或之后继续触发方法。

我试图设置一个setTimeout但这只会让我感到困惑,因为我认为会是一个正确的间隔,只会让我更加困惑。有人可以看一下吗?

您还可以找到有效网站http://rossb.byethost11.com/

        /*
         * finds duration of sound file in milliseconds
         */
        function getMasterDuration() {
          var sound = document.getElementById("session-1");
          var returnValue = sound.duration * 1000;
          return returnValue;
        }


        /*
         * called from the button
         */

        function playAllService() {
          //set up recursive loop to play sounds
          window.setInterval(recursivePlay, getMasterDuration);
        }

        function recursivePlay() {
            //play all sounds
            playAll();
            //set timeout until sound is done (?)
            setTimeout(recursivePlay, getMasterDuration);
          }
          /*
           * Finds all the recording sessions and plays them.
           */

        function playAll() {
          for (var i = 1; i <= numberOfSessions; i++) {
            play(i);
          }
        }

是的,我知道它需要清理。

感谢您的帮助!

编辑澄清:我希望它循环而不会有任何中断。像一个环形花瓣或鼓机。

1 个答案:

答案 0 :(得分:1)

当你访问一个没有括号的函数时,你指的是函数本身。因此,对recursivePlay的调用会返回此信息:

function recursivePlay() {
  //play all sounds
  playAll();
  //set timeout until sound is done (?)
  setTimeout(recursivePlay, getMasterDuration);
}

对于setTimeout的第一个参数,这是正确的,因为您希望函数在一段时间后运行。

setTimeout的第二个参数应该是一个数字(以毫秒为单位)。但是,您将返回函数 getMasterDuration而不是函数的结果

要解决此问题,只需将括号添加到getMasterDuration

setTimeout(recursivePlay, getMasterDuration());