播放正在生成的PCM

时间:2017-09-18 08:45:39

标签: javascript audio pcm raw-data

我在javascript中生成一些原始音频数据,我需要在生成它时播放它。我在这里搜索了这个,最接近我要找的是this。但是,在给出的答案中,首先生成数据点阵列,然后播放音频。我需要在生成它时播放它。基本上我收到一些其他数据流,处理它并根据它生成音频。当我收到它时,我需要播放与我收到的数据相对应的音频。 (一个简化的例子是接收音频音量和频率。)

1 个答案:

答案 0 :(得分:1)

如果我正确收到请求,那么您需要的只是ScriptProcessorNode 您将通过以下方式将其与PCM数据一起提供:

  • 等待onaudioprocess事件。
  • 从事件AudioBuffer获取outputBuffer。
  • 循环遍历outputBuffer的每个通道(将返回一个Float32Array)。
  • 遍历outputBuffer通道数据的所有样本。
  • 设置您自己的数据

function makeSomeNoise() {
  var ctx = new AudioContext();
  var processor = ctx.createScriptProcessor(4096, 1, 1);
  processor.onaudioprocess = function(evt) {
    var outputBuffer = evt.outputBuffer;
    // Loop through the output channels
    for (var channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
      var outputData = outputBuffer.getChannelData(channel);
      // Loop through the 4096 samples
      for (var sample = 0; sample < outputBuffer.length; sample++) {
        outputData[sample] = ((Math.random() * 2) - 1) * 0.5;
      }
    }
  };
  processor.connect(ctx.destination);
}

btn.onclick = function() {
  if (confirm("That won't be really nice"))
    makeSomeNoise();
}
<button id="btn">make some noise</button>