javascript - 如何在 jQuery 中重新触发尚未完成的音频

标签 javascript jquery audio

我正在用 jQuery 开发这个最简单的鼓机。非常基本的事情,没有音序器什么的,只是分配给 PC 键盘上的按键事件的样本。我基本上都记下来了,正如您从下面的代码中看到的:

$(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 控制样本加载到数组中,然后使用该数组将声音分配给每个按键事件。 一切都运行得很好。

我的问题是:当我非常快地第二次按下同一键时(示例尚未完成),它不会重新触发。我希望如此。这样我就可以从中敲出一些病态的模式,丛林风格(;))。

我试图在第二次按下时强制重新触发每个按键事件,大致如下:

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

但是 - 正如你可以想象的 - 无济于事。 所以,我的问题是:我可以在完成之前重新触发音频样本吗?如果可以的话,该怎么做? (理想情况下,在没有完成第一个新闻发布会的情况下开始第二个新闻发布会是完美的,但我们可以做到)。任何和所有帮助将不胜感激。

最佳答案

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

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

关于javascript - 如何在 jQuery 中重新触发尚未完成的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247790/

相关文章:

javascript - 如何使用javascript调用webservice

javascript - 谷歌地图 API v3 : Markers don't always continuously bounce

android - 在Android中播放媒体

haskell - Sound.Pulse.Simple 不起作用?

ios - 缺少音频/视频 SDP 问题

javascript - 等待 AJAX 请求响应

javascript - getCurrentPosition() 和 watchPosition() 在不安全的来源上被弃用

javascript - 为什么 html <object> 元素不响应鼠标事件?

javascript - 当元素到达视口(viewport)顶部时添加类

javascript - Javascript 和 Jquery 中的变量范围