我正在使用键盘通过Web Audio API播放声音。
经过一些实验黑白键事件(使用字符键)后,我发现keydown和keyup最适合启动和停止WebAudio播放。
即:keydown开始播放合成音符,keyup停止播放。
然而,如果keydown持有太长时间,当然,keydown会被反复触发。我尝试过stopPropogation,preventDefault和stopImmediatePropogation。但是,似乎没有工作。
我希望在没有' keydown'多次射击。以下是我一直在使用的内容:
'use strict';
var keyCodes = [90, 83, 88, 68, 67, 86, 71, 66, 72, 78, 74, 77, 188];
var i = 0;
var audioCtx = new AudioContext(), osc;
window.addEventListener('keydown', function(e){
e.stopPropagation();
var kv = e.which;
var a = keyCodes.indexOf(kv);
console.log(kv);
if(kv == keyCodes[a]){
osc = audioCtx.createOscillator();
osc.frequency.value = 10 * a;
osc.type = "triangle";
osc.connect(audioCtx.destination);
osc.start(0);
console.log("yes");
}
});
window.addEventListener('keyup', function(e){
osc.stop();
});
==>我希望只要按下按键,合成器就会响起,但是一旦释放按键,合成器就会停止。< ==
我已经读过(通过N.Zakas)拿着一把钥匙向下按下按键和按键,但是我在操纵这两个键时遇到了麻烦,以便得到我想要的东西。
有任何帮助吗?谢谢!
-Erik Kimsey