有没有更好的方法来创建和弦声音?

时间:2019-03-25 13:27:01

标签: javascript audiocontext

我创建了一段似乎可以同时播放声音文件的代码,但是,我不确定这是否是最好的方法。

本质上,我正在尝试创建简单的网络钢琴,以后可能会在游戏中使用这种方法。结果非常完美。除了键盘组合限制外,我可以毫无问题地弹奏和弦。如果我要将var request = new XMLHttpRequest();移到函数之外,使其成为一次调用全局变量,那么声音不会像现在一样同时播放。

document.onkeydown = function(key)
{
    if(pitch[key.keyCode]!==undefined)
    Voice(pitch[key.keyCode]);
}

function Voice(pitch)
{
    var source = audioCtx.createBufferSource();
    var request = new XMLHttpRequest();
    request.open("GET","sample.wav",true);
    request.responseType = "arraybuffer";
    request.send();
    request.onload = function()
    {
        var audioData = request.response;
        audioCtx.decodeAudioData(audioData, function(buffer)
        {
            source.buffer = buffer;
            source.playbackRate.value = pitch;
            source.connect(audioCtx.destination);
            source.start(0);
        },
        function(e)
        {
            console.log(e);
        });
    }
}

我唯一关心的是代码是否用新功能填充了内存。就像样本播放完毕一样,仍然有sourcerequestaudioData以及介于两者之间的所有功能会无限期地在内存中浮动。

因此,如果垃圾回收没有处理好,那么找出样本实例何时播放并从内存中手动删除该特定“对象”的最佳方法是什么?

0 个答案:

没有答案