javascript - Web Audio API,获取两个数组中左/右 channel 的 getByteTimeDomainData。

标签 javascript audio web-audio-api

我目前正在尝试使用网络音频 API 创建音频可视化,即我正在尝试从给定的音频源生成利萨茹图形。

我遇到了这个post ,但我缺少一些先决条件。如何获取左/右 channel 的时域数据?目前看来我只获取合并的数据。

任何帮助或提示将不胜感激。

$(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();

});

最佳答案

观察正确,波形为下混频结果。来自 current spec (我的重点):

Copies the current down-mixed time-domain (waveform) data into the passed unsigned byte array. [...]

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

有关 createChannelSplitter() 的更多详细信息,请参阅 this link

关于javascript - Web Audio API,获取两个数组中左/右 channel 的 getByteTimeDomainData。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642144/

相关文章:

android - 使用NDK进行Android录音通话

javascript - 对于 Web Audio 节点,.connect() 是做什么的?

javascript - 如何使用 Web Audio API 添加 LFO 来过滤截止

javascript - 更改元素 ID 和点击行为

wpf - WPF-当“文本框”无法再接收任何输入时,播放默认的Windows声音

java - 为什么使用Java Audiosystem的glissando频率会过高

javascript - 多个音频文件的位置相关音频播放

javascript - chrome 调试器对象数据不一致

javascript - 如何通知其他用户某个模式已打开

javascript - 是否可以使用 javascript 关闭浏览器窗口?