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) );
4

3 回答 3

4

事实证明这是可能的:我不得不对 Float32Array 求和

于 2012-12-04T20:38:47.757 回答
1

您可以使用 OfflineAudioContext 并获取结果缓冲区。这将使您比实时更快地处理+合并。

于 2013-01-31T22:17:33.413 回答
0

我会将两个源的输出连接到ScriptProcessorNode并实时处理它们。

于 2013-01-31T15:51:31.800 回答