我正在使用Web音频API播放MP3文件。我不知道如何使用源缓冲区(即不创建像某些指南所建议的声音:http://middleearmedia.com/timed-rhythms-with-web-audio-api-and-javascript/)以特定时间间隔(即0.25,0.5,0.75 1秒间隔)为季度音符安排事件。计划Web音频缓冲区中的回调
我的背景是设置如下所示:
function setupAudioNodes() {
javascriptNode = context.createScriptProcessor(2048, 1, 1);
javascriptNode.connect(context.destination);
analyser = context.createAnalyser();
analyser.smoothingTimeConstant = 0.3;
analyser.fftSize = 32;
sourceNode = context.createBufferSource();
sourceNode.connect(analyser);
analyser.connect(javascriptNode);
sourceNode.connect(context.destination);
}
我可以检索使用context.currentTime
当前时间,其中上下文是音频方面,但对分配回调并不经常发生。
我已经试过一些小事,如:
if (context.currentTime.toFixed(2).split(".")[1] === .25) {
runFunc();
}
然而,这并不没有定期发生。如果我打印输出,它并不总是打印出相同的时间间隔,这意味着这种方法看起来不太好。
我尝试过的另一种方法是使用setInterval
,我知道这很不理想,但也不起作用,但也不起作用,并且会按照正常的间隔步长(1秒)调用一次函数,然后分解调用它多次。
javascriptNode.onaudioprocess = function() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
setInterval(myFunc(array), 1000); // first time ok, after it runs many times a second
}
我最后的,有点幼稚的做法是创建一系列可接受的值。我正在使用的应用程序不需要非常精确,所以我希望我可以倾听范围如0.26 - 0.28。这种方法几乎可行,只是它仍然每秒只调用几次而不是几次。
if (time >= 0 && time <= 25) {
myFunc(array);
}
我哪里错了?
一种修改我发现,使人们更准确的在增加的间隔期至1000,但是随后将在值的范围来检查的时间。当需要快速连续调用函数时,我需要找到一种方法来防止罕见但非常可能的时间。 – user3162553