Web Audio API Stream:为什么数据阵列不会发生变化?

时间:2015-10-02 20:49:09

标签: html5-audio audio-streaming web-audio live-streaming audiocontext

编辑2:解决了。见下面的答案。

编辑1:

我稍微更改了我的代码,添加了一个增益节点,移动了一个函数。我还发现如果我使用麦克风,它会起作用。仍然无法使用USB音频输入。任何的想法?这是我目前的代码:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

window.onload = function(){

  var audioContext = new AudioContext();
  var analyser = audioContext.createAnalyser();
  var gainNode = audioContext.createGain();

  navigator.mediaDevices.getUserMedia({ audio:true, video:false }).then(function(stream){ //MediaStream

    var source = audioContext.createMediaStreamSource(stream);
    source.connect(analyser);
    analyser.connect(gainNode);
    gainNode.connect(audioContext.destination);

    listen();

  });

  function listen(){

    analyser.fftSize = 256;
    var bufferLength = analyser.frequencyBinCount;
    var dataArray = new Uint8Array(bufferLength);
    var index = 0;

    function write(){
      requestAnimationFrame(listen);
      analyser.getByteTimeDomainData(dataArray);
      $('.monitor').html(JSON.stringify(dataArray) + ' -- ' + (index++));
    }

    write();
  }

}

OLD / ORIGINAL POST:

我目前的代码就是这个,我目前通过USB音频接口连接了一个kewboard:我已经有信号,已经尝试过其他程序..所以:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

window.onload = function(){

  var audioContext = new AudioContext();
  var analyser = audioContext.createAnalyser();

  navigator.mediaDevices.getUserMedia({ audio:true, video:false }).then(function(stream){ //MediaStream

    var source = audioContext.createMediaStreamSource(stream);
    source.connect(analyser);
    analyser.connect(audioContext.destination);

    analyser.fftSize = 2048;
    var bufferLength = analyser.frequencyBinCount;
    var dataArray = new Uint8Array(bufferLength);

    function listen(){
      requestAnimationFrame(listen);
      analyser.getByteTimeDomainData(dataArray);
      $('.monitor').html(JSON.stringify(dataArray));
    }

    listen();

  });
}

在我弹奏键盘时,dataArray根本没有变化。为什么?我对这件事情很陌生,所以我可能做错了......

1 个答案:

答案 0 :(得分:1)

好的,现在它正在运作。我的基本当前测试代码如下。 Html只有一个div.monitor写在里面。目前在firefox上测试。我的硬件是键盘>搅拌机> behringer UCA222>电脑(usb)。我在弹奏键盘时得到数据,现在我很高兴。

与原始代码存在一些差异,但我认为最重要的是我正在全局保存媒体源(public class MainFragment extends Fragment{ private User userItem; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userItem = KimchiDataCache.getInstance().get(User.class); } )。此处还有其他相关问题的帖子,例如:Chrome: onaudioprocess stops getting called after a while和此HTML5 Microphone capture stops after 5 seconds in Firefox

window.audiosource