Web Audio API,获取两个数组中左/右声道的getByteTimeDomainData。

时间:2016-06-05 12:53:49

标签: javascript audio web-audio web-audio-api

我目前正在尝试使用网络音频API创建音频可视化,即我试图从给定音频源生成lissajou数字。

我偶然发现了post,但我错过了一些先决条件。如何获取左/右声道的时域数据?目前我似乎只获得合并数据。

非常感谢任何帮助或提示。

$(document).ready(function () {

  var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
  var audioElement = document.getElementById('audioElement');
  var audioSrc = audioCtx.createMediaElementSource(audioElement);
  var analyser = audioCtx.createAnalyser();

  // Bind analyser to media element source.
  audioSrc.connect(analyser);
  audioSrc.connect(audioCtx.destination);

  //var timeDomainData = new Uint8Array(analyser.frequencyBinCount);
  var timeDomainData = new Uint8Array(200);

  // loop and update time domain data array.
  function renderChart() {
     requestAnimationFrame(renderChart);

     // Copy frequency data to timeDomainData array.
     analyser.getByteTimeDomainData(timeDomainData);

     // debugging: print to console
     console.log(timeDomainData);

  }

  // Run the loop
  renderChart();

});

1 个答案:

答案 0 :(得分:1)

观察结果正确,波形是下混合结果。从current spec(我的重点):

  

将当前向下混合时域(波形)数据复制到   传递无符号字节数组。 [...]

要解决此问题,您可以使用通道分割器(createChannelSplitter())并将每个通道分配给两个独立的分析器节点。

有关createChannelSplitter()的更多详情,请参阅 this link