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 に答える