如何在jQuery尚未完成时重新触发音频

时间:2016-02-06 23:27:28

标签: javascript jquery audio

我正在使用jQuery中最简单的鼓机。非常基本的东西,没有音序器,只有样本分配给PC键盘上的keydown事件。我基本上把它全部搞定了,你可以从下面的代码中看到:

$(document).ready(function(){
    drumInit(4);
});

function drumInit(count){
    var samples = [];   
    for(i = 0; i < count; i++) {
        sample = new Audio('sample-' + i + '.wav');
        samples.push(sample);
    }
    samples[2].volume = .3;
    samples[3].volume = .4;

    $(document).keydown(function(e){
        switch(e.which) {
            case 90:                
                samples[0].play();
            break;

            case 88:
                samples[2].play();
            break;

            case 67:
                samples[1].play();
            break;

            case 86:
                samples[3].play();
            break;

            default: return;
        }
        e.preventDefault();             
    });
}

正如您所看到的,函数drumInit控制加载到数组中的样本,然后用于将声音分配给keydown事件,每个事件由每个事件分配。 这一切都很好。

我的问题是:当我第二次非常快地按下相同的键时(样品尚未完成),它不会重新触发。我想要它。通过这种方式,我可以用它来解决一些生病的模式,丛林风格(;))。

我试图在第二次按下时强制重新触发每个关键事件,这些都是这样的:

case 90:                
    samples[0].play();
    if(samples[0].playing) {
        samples[0].pause();
        samples[0].ended;
        samples[0].play();
    }
break;

但是 - 你可以想象 - 无济于事。 所以,我的问题是:我可以在音频样本完成之前重新触发吗?如果我能,怎么办呢? (理想情况下,如果没有完成第一次新闻播放,那么开始第二次新闻播放将是完美的,但我们可以管理)。任何和所有帮助将深表感谢。

1 个答案:

答案 0 :(得分:1)

要解决此问题,只需设置currentTime字段并播放示例:

samples[0].currentTime = 0;
samples[0].play();