一个接一个地重现音频文件

时间:2012-01-05 16:31:51

标签: jquery html5 firefox audio

我使用HTML5音频标签一个接一个地播放音频文件,但我的例程似乎让Firefox崩溃了。它仅在我添加alert()时有效。

我有一个PHP例程,如果另一个应用程序向服务器发送了新事件,则每2秒检查一次,如果有,我在屏幕上写下新事件的名称。其中一些事件具有与之相关的音频文件(它们可以是不同的声音),因此当事件到达时,必须播放音频文件。

我有这个例程:

当事件到达时,我调用此函数:playSound(sound_name);

    function playSound(sound_name){
        if (!current_sound){
            current_sound = true;
            $("#audio-player")[0].src = "../snd/"+sound_name;
            //$("#audio-player")[0].load();
            $("#audio-player")[0].play();
        }
        else {
            //alert(sound_name);
            playSound(sound_name);
        }
    }

变量" current_sound"当audio_player触发"结束"时设置为false音频标签的事件。我为这个事件添加了一个函数,所以每当它被触发时它都会将变量current_sound设置为false。

所有这些代码的问题在于它只能在函数playSound()中使用该警报。如果我评论它,Firefox崩溃并开始说js脚本花了太长时间才完成(他们的js脚本之一,而不是我的)。

我搜索了很多,但我只找到了有关如何复制给定文件列表的示例,这些文件在我的情况下无用,因为我不知道哪个文件将事先播放。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你有一个简单的递归调用。 alert只会增加延迟并“中断”该执行链,允许其他地方的线程在边缘获取一个单词。大概你在其他地方设置代码current_soundfalse

不要试图像这样“等待”,而是使用回调函数 - 无论你在哪里做current_sound = false,而是执行.play()

答案 1 :(得分:0)

第一次通话后,current_sound将设为true。这将导致每次都执行else分支,再次调用该函数。这导致无休止的递归。