用于生成声音的缓冲音频

时间:2013-04-15 15:56:31

标签: javascript html5-audio web-audio

我有一个振荡器来生成键盘的频率。这一切都在我输出到扬声器时有效,但是除了输出到扬声器之外我想要缓冲它以便我可以将它变成基座64并在以后再次使用。我见过的唯一例子是xhr,我不需要它,因为显然我希望能够在模块化路由中添加一个节点来获取输入,将其存储在一个数组中,然后输出到硬件。

这样的事情:

var osc = ctx.createOscillator();
osc.type = 3;
osc.frequency.value = freq;
osc.connect(buffer);
buffer.connect(ctx.destination);

这可能吗?

3 个答案:

答案 0 :(得分:1)

您是否考虑过使用ScriptProcessorNode?

请参阅:http://www.w3.org/TR/webaudio/#ScriptProcessorNode

您可以将eventListener附加到此节点,以便在通过时捕获音频样本数组。然后,您可以保存这些缓冲区并根据需要对其进行操作。

答案 1 :(得分:1)

你检查过RecorderJs吗? https://github.com/mattdiamond/Recorderjs。我认为它可以满足您的需求。

答案 2 :(得分:0)

我通过使用Matt的Recorder.js https://github.com/mattdiamond/Recorderjs并将其连接到GainNode解决了我的问题,GainNode充当从多个振荡器到ctx.destination的中介。我将使用localStorage,但这是一个使用数组的示例(这不包括振荡器设置)。

var recorder;
recorder = new Recorder(gainNode, { workerPath: "../recorderWorker.js"});
recorder.record();

var recordedSound = [];
function recordSound()  {
    recorder.exportWAV(function(blob) {
        recordedSound.push(blob);
    });
}

function play(i)  {
    var audio = new Audio(window.URL.createObjectURL(recordedSound[i]));
    audio.play();
}