0

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

像这样的东西:

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

这可能吗?

4

3 回答 3

1

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

于 2013-04-16T03:44:58.087 回答
1

您是否考虑过使用 ScriptProcessorNode?

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

您可以将 eventListener 附加到此节点,允许您在音频样本通过时捕获它们。然后,您可以保存这些缓冲区并根据需要操作它们。

于 2013-04-15T17:41:44.017 回答
0

我已经通过使用 Matt 的 Recorder.js https://github.com/mattdiamond/Recorderjs解决了我的问题,并将其连接到作为从多个振荡器到 ctx.destination 的中介的 GainNode。我将使用 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();
}
于 2013-04-19T18:01:35.997 回答