8

我一直在查看 Web Audio API 文档和教程,但还没有弄清楚如何解决这个问题。

假设我通过 XMLHttpRequest 加载了几个 wav 文件,然后创建了缓冲区源。我知道我可以准确地安排播放开始的时间。但是,如果我不想播放它们,而是想将它们存储并安排在缓冲区中怎么办。

一个真实的例子:我想创建一个简单的音序器,您可以在其中安排鼓,然后将整个混音导出为 wav(不使用 RecorderJS 或其他东西进行录制)。任何想法,图书馆?

4

1 回答 1

5

只是做了一些这样的事情。

本质上,您需要创建一个离线上下文:

var offline = new webkitOfflineAudioContext(numChannels, lengthInSamples, sampleRate)

您必须使用这个新上下文重新创建所有 BufferSources:

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

于 2013-06-07T01:23:02.073 回答