Audio 如何使用web音频api重新触发(扼杀)声音
我很好奇我怎么能在网络音频api中做一个叫做“扼杀”的事情。当我使用某个键播放声音时,如果再次按下该键,我希望它停止声音并再次播放。你知道怎么做吗 到目前为止,我的代码是:Audio 如何使用web音频api重新触发(扼杀)声音,audio,web-audio-api,Audio,Web Audio Api,我很好奇我怎么能在网络音频api中做一个叫做“扼杀”的事情。当我使用某个键播放声音时,如果再次按下该键,我希望它停止声音并再次播放。你知道怎么做吗 到目前为止,我的代码是: $(document).on("keydown", function(e) { console.log(e); switch (e.keyCode) { case 81: // Q playKick(BUFFERS.kick); break; } }) function play
$(document).on("keydown", function(e) {
console.log(e);
switch (e.keyCode) {
case 81: // Q
playKick(BUFFERS.kick);
break;
}
})
function playKick(instrument) {
source1 = context.createBufferSource();
source1.buffer = instrument;
source1.loop = true;
source1.connect(context.destination);
if (!source1.start)
source1.start = source1.noteOn;
source1.start(0);
}
您希望保留对当前播放声音的引用。因此,这需要在
playKick
的范围之外提供。然后,在playKick
中,在创建新声音并将其分配给该全局变量之前,对旧声音调用stop
或noteOff
比如:
var current;
$(document).on('keydown', function( e ) {
console.log(e);
switch (e.keyCode) {
case 81:
playKick(BUFFERS.kick);
break;
}
});
function playKick( instrument ) {
var source = context.createBufferSource();
source.buffer = instrument;
source.loop = true;
source.connect(context.destination);
if ( current ) {
if ( !current.stop ) {
current.stop = current.noteOff;
}
current.stop(0);
}
if ( !source.start ) {
source.start = source.noteOn;
}
source.start(0);
current = source;
}
当然,有更好的方法来组织这件事,但希望这能让你开始