Web音频上下文和缓冲区的最大输出数是多少

时间:2015-03-21 16:43:38

标签: javascript audio html5-audio web-audio

我正在尝试创建一个程序,它可以将音频输出到单个缓冲区中的任意数量的任意通道。我在Mac上使用Chrome 43.0.2339.0 canary(64位)。我输出的硬件是Motu 16A,它可以通过霹雳连接提供128个IO通道。我已经创建了一个笔(基于修改过的MDN示例),它演示了我想要完成的任务:http://codepen.io/alexanderson1993/pen/dPwqPL

代码:

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var button = document.querySelector('button');

audioCtx.destination.channelCount = 8

var channels = audioCtx.destination.channelCount;
// Create an empty half-second buffer at the
// sample rate of the AudioContext
var frameCount = audioCtx.sampleRate * 0.5;
button.onclick = function(){
var myArrayBuffer = audioCtx.createBuffer(audioCtx.destination.channelCount, frameCount, audioCtx.sampleRate);

  // Fill the buffer with white noise;
  //just random values between -1.0 and 1.0
  for (var channel = 0; channel < channels; channel++) {
   // This gives us the actual ArrayBuffer that contains the data
   var nowBuffering = myArrayBuffer.getChannelData(channel);
   for (var i = 0; i < frameCount; i++) {
     // Math.random() is in [0; 1.0]
     // audio needs to be in [-1.0; 1.0]
     nowBuffering[i] = Math.random() * 2 - 1;
   }
 }

  // Get an AudioBufferSourceNode.
  // This is the AudioNode to use when we want to play an AudioBuffer
  var source = audioCtx.createBufferSource();
  // set the buffer in the AudioBufferSourceNode
  source.buffer = myArrayBuffer;
  // connect the AudioBufferSourceNode to the
  // destination so we can hear the sound
  source.connect(audioCtx.destination);
  // start the source playing
  source.start();
  }

你会注意到第4行我明确地将通道数设置为8,即使我的目标能够有128个通道(运行audioCtx.destination.maxChannelCount就可以证明)。这可以按预期运行,音频通过管道连接到所有8个通道。但是,每当我将通道数增加到8以上时,任何通道都没有输出。

我的问题在于限制所在 - 是否在AudioBuffer中? AudioContext?我的硬件设置?有没有办法克服这些限制并输出到比8更多的通道?

1 个答案:

答案 0 :(得分:1)

这是bug in chrome;它正在进行中。