2012-12-04 42 views
3

有关html5 webaudio的问题:是否可以合并多首歌曲?合并多个音频缓冲区来源

我有不同的音轨,使用webaudio同时播放,但我需要处理音频,所以我需要一个缓冲区内的所有音频,而不是每个音轨都有自己的缓冲区。

我已经尝试通过增加他们的渠道数据合并他们,但我总是得到“未捕获的RangeError:指数超出范围”

function mergeBuffers(recBuffers, recLength){ 

    var result = new Float32Array(recLength*2); 
    var offset = 0; 
    for (var i = 0; i < recBuffers.length; i++){ 
    result.set(recBuffers[0], offset); 
    offset += recBuffers[0].length; 
    } 
    return result; 
} 

var recBuffersL = []; 
for (var i=0;i<audioTracks.length; i++) 
{ 
    recBuffersL[i] = audioTracks[i].currentBuffer.getChannelData(0); 

} 

var recBuffersR = []; 
for (var i=0;i<audioTracks.length; i++) 
{ 
    recBuffersR[i] = audioTracks[i].currentBuffer.getChannelData(1); 

} 


var buffers = []; 
buffers.push(mergeBuffers(recBuffersL, recBuffersL.length)); 
buffers.push(mergeBuffers(recBuffersR, recBuffersR.length)); 
+0

您使用的是Web Audio API吗?您可以根据需要将任意数量的源连接到AudioContext.destination, – MikeHelland

+0

是的;但我正在处理,所以在发送音频到audiocontext我想操纵它 – Thomas

回答

5

原来这是可能的: 我不得不求和Float32Array

0

您可以使用OfflineAudioContext并返回结果缓冲区。这会让你以比实时更快的速度处理+合并。