1

我有一段看起来像下面的代码,它工作正常。它的作用是在鼠标单击名为 synth 的 div 时发出振荡器声音。然后在释放鼠标按钮时停止播放振荡器。

 synth.onmousedown= function () {
    oscillator = context.createOscillator(),  // Creates the oscillator 
    oscillator.type = synthWaveform.value;  
    oscillator.frequency.value = pitchInput.value;                   
    oscillator.connect(context.destination);  // Connects it to output
    oscillator.noteOn(0); 


    };



    synth.onmouseup = function ()    {  
    oscillator.disconnect(); 

    };

然后我添加了下面的代码,以便当用户按下键盘字符时它会触发振荡器。问题是当按键被按住时,它会重复播放,然后在释放键盘字符时不会停止。我想知道是否有任何库或代码可以用来规避这个问题。目标是使最终结果类似于鼠标向下/向上效果,但键盘移动会触发声音。谢谢。

$('body').keydown(function() {
oscillator = context.createOscillator(),  // Creates the oscillator 
oscillator.type = synthWaveform.value;  
oscillator.frequency.value = pitchInput.value;                   
oscillator.connect(context.destination);  // Connects it to output
oscillator.noteOn(0); 
});

$('body').keyup(function() {
oscillator.disconnect();

});
4

2 回答 2

1

如果您需要比以下选项更高级的东西,您可以使用 underscore.js debounce。

var keydown = false;

$('body').keydown(function() {
    if(!keydown){
        oscillator = context.createOscillator(),  // Creates the oscillator 
        oscillator.type = synthWaveform.value;  
        oscillator.frequency.value = pitchInput.value;                   
        oscillator.connect(context.destination);  // Connects it to output
        oscillator.noteOn(0);
        keydown = true;
    }
});

$('body').keyup(function() {
    oscillator.disconnect();
    keydown = false;
});
于 2013-01-13T08:14:52.040 回答
0

这可能是一种解决方法

var keyIsDown = false;

$('body').keydown(function() {
    if(keyIsDown) {
       // key is already down
       return true;
    }

    keyIsDown = true;

    // do your keydown handler
}

$('body').keyup(function() {
    keyIsDown = false;
}
于 2013-01-13T08:14:26.990 回答