2015-10-18 103 views
1

我一直试图通过webaudio api从麦克风输入中获取实时音量。阅读一些文章后,我认为我有什么工作,但它似乎是从分析仪和scriptprocessor返回音量始终为0webaudio麦克风输入音量始终为0

更新,使“麦克风”作为数据源

// detect support for different browsers 
    navigator.getUserMedia = (navigator.getUserMedia || 
           navigator.webkitGetUserMedia || 
           navigator.mozGetUserMedia || 
           navigator.msGetUserMedia); 

    var Mosquito = { 

     setup : function(){ 
      // ask permission to grab the mic 
      var stream = navigator.getUserMedia({ audio: true }, Mosquito.successCallback, Mosquito.errorCallback); 
    }, 

    successCallback : function(localMediaStream){ 
     var audioContext = new AudioContext(); 

     // hook up the mic to the mediaStreamSource in audioContext 
     var microphone = audioContext.createMediaStreamSource(localMediaStream); 
     Mosquito.processAudio(microphone, audioContext); 
    }, 

    processAudio : function(microphone, audioContext){ 
     // analyze a piece of the signal 
     var analyser = audioContext.createAnalyser(); 
     analyser.smoothingTimeConstant = 0.3; // make it less jizzy 
     analyser.fftSize = 512; 

     // create a scriptProcessor in order to read out the analyser data 
     var javascriptNode = audioContext.createScriptProcessor(2048, 1, 1); 

     // connect all the things 
     microphone.connect(analyser); 
     analyser.connect(javascriptNode); 
     javascriptNode.connect(audioContext.destination); 


     javascriptNode.onaudioprocess = function(e){ 
      var array = new Uint8Array(analyser.frequencyBinCount); 
      analyser.getByteFrequencyData(array); 
      console.log(array); 
      var average = Mosquito.getAverageVolume(array); 
      console.log(average); 
      Mosquito.drawMeters(average); 
     }; 
    }, 

    drawMeters : function(average){ 
     document.getElementById("meter").innerHTML = average; 
    }, 

    getAverageVolume : function(array){ 
     var values = 0; 
     var average; 

     var length = array.length; 

     // get all the frequency amplitudes 
     for (var i = 0; i < length; i++) { 
      values += array[i]; 
     } 

     average = values/length; 
     return average; 
    }, 

    errorCallback : function(){ 
     console.log('nope'); 
    } 
} 
Mosquito.setup(); 

感谢您花时间看看我做错了什么,网络音频对我来说还是很新颖:)

回答

0

为什么你要创建一个buffersource?您应该只连接mediastreamsource(目前未连接,这就是您没有收到任何数据的原因)。

+0

谢谢,我已将我的变量重命名为“麦克风”,并确实看到我没有将它用作mediastreamsource。 – Jorre

+0

任何想法为什么分析仪停止几秒钟后,或者我应该为此打开一个新的问题? – Jorre

+0

我期望它与你的分析器和javascriptNode在processAudio函数中被声明有关,并且它们最终会被垃圾收集 - 尝试在全局声明它们。 – cwilso