我一直在检查Web Audio API文档和教程,但是还没有静静地弄清楚如何解决此问题。
假设我通过XMLHttpRequest加载了几个wav文件,然后创建了缓冲源。我知道我可以安排何时精确开始播放。但是,如果我不想播放它们,而是想将它们存储并安排在缓冲区中怎么办?
一个真实的例子:我想创建一个简单的音序器,在其中您排定鼓,然后将整个混音导出到wav中(无需使用RecorderJS或其他东西进行录制)。有什么想法,图书馆吗?
只是做了这样的事情。
基本上,您需要创建一个脱机上下文:
var offline = new webkitOfflineAudioContext(numChannels, lengthInSamples, sampleRate)
您必须使用此新上下文重新创建所有BufferSource:
var newBufferSource = offline.createBufferSource();
newBufferSource.buffer = someAudioBuffer;
newBufferSource.connect(offline.destination);
然后安排您的播放:
newBufferSource.start(offline.currentTime + 10);
然后绑定到complete
事件以进行离线渲染:
offline.onComplete = function( ev ){
doSomething(ev.renderedBuffer);
}
然后开始“渲染”:
offline.startRendering();
一旦有了ev.renderedBuffer
,您就可以用它做任何想做的事情。在我的应用中,我有一个WAV编码器,最终我自己写了-但您可以修改Recorder.js使其很容易地完成相同的操作。
仅需注意:webkitOfflineAudioContext
目前仅适用于Chrome。如果您有兴趣,请点击以下链接:OfflineAudioContext