我一直在查看 Web Audio API 文档和教程,但还没有弄清楚如何解决这个问题。
假设我通过 XMLHttpRequest 加载了几个 wav 文件,然后创建了缓冲区源。我知道我可以准确地安排播放开始的时间。但是,如果我不想播放它们,而是想将它们存储并安排在缓冲区中怎么办。
一个真实的例子:我想创建一个简单的音序器,您可以在其中安排鼓,然后将整个混音导出为 wav(不使用 RecorderJS 或其他东西进行录制)。任何想法,图书馆?
我一直在查看 Web Audio API 文档和教程,但还没有弄清楚如何解决这个问题。
假设我通过 XMLHttpRequest 加载了几个 wav 文件,然后创建了缓冲区源。我知道我可以准确地安排播放开始的时间。但是,如果我不想播放它们,而是想将它们存储并安排在缓冲区中怎么办。
一个真实的例子:我想创建一个简单的音序器,您可以在其中安排鼓,然后将整个混音导出为 wav(不使用 RecorderJS 或其他东西进行录制)。任何想法,图书馆?
只是做了一些这样的事情。
本质上,您需要创建一个离线上下文:
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