【问题标题】:JQuery not playing multiple sound files or delaying eventsJQuery 不播放多个声音文件或延迟事件
【发布时间】:2012-10-24 17:21:12
【问题描述】:

我一直在尝试浏览文本列表并播放等效的字母声音文件。该代码播放字符串中的最后一个文件,但会循环遍历每个元素(尝试使用警告框)。我试图为每个字母播放声音剪辑,我尝试使用 setTimeout 来延迟 for 循环的检测,但没有成功。有人对此有任何见解吗?我也使用带有 html5 网页的 jquery。

function playSound(msg) {
                var sound_file_url = "snd/" + msg + ".wav" ;
                $('#sound').html("<embed src='"+sound_file_url+"' hidden=true autostart=true loop=false>");
                alert("Text: " + msg );
}

function startPoint() {
   var input = $("#text").val();
   for (var i = 0, j = input.length; i < j; i++) {
        if(input[i].match(/^[a-zA-Z0-9]+/) ){
                setTimeout(playSound(input[i]), 500);
        }
    }
};

长期潜伏者,第一次海报。感谢所有偷看的人。

【问题讨论】:

    标签: javascript jquery html audio settimeout


    【解决方案1】:

    您没有保存上下文,因为它将始终是最后一个 i 值。尝试以下代码。你也马上打电话给playSound

       function playSound(msg) {
    
                    console.log("Text: " + msg );
    }
    
    function startPoint() {
    
       var input = $("#text").val(), i = 0, j = input.length;
        function repeat(){
            if(i == j ) return;
            if(input[i].match(/^[a-zA-Z0-9]+/) ){
                 playSound( input[i]);
            }
            setTimeout(repeat, 500);
            i++;
        }
        repeat();
    };​
    

    【讨论】:

    • 我看到我的播放声音错误!我试过了,但它仍然不会延迟循环:/或允许播放多个声音
    • 您是否遇到任何错误?尝试将延迟值从 500 增加到 2000
    • 我将延迟设置为 2000(2 秒),但它仍然会撕裂阵列,然后播放最后一个声音(没有其他声音)而不会延迟。我进行了测试以确保它使用警报通过每个元素
    • 我认为它会为每个函数调用做一个超时事件对不起:/
    • 我做了更改看看。如果您想进行任何其他更改,请告诉我
    【解决方案2】:

    我认为这是因为变量“i”。

    您可以尝试像这种模式来保留变量'i';

    (函数(newI){

    playSound(newI);            
    

    })(i);

    还有,

    还有一点是,一些浏览器只支持 HTML5 Audio API 的一种音频通道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多