2013-04-09 3 views
3

나는이 다음 코드를 사용하여 사용자의 마이크의 실시간 수준을 얻을 수있는 HTML5 webkitAudioContext을 사용하고 있습니다 : 복사하는 경우HTML5 오디오 버퍼 갇히지

var liveSource; 

function getLevel(){ 
    var context = new webkitAudioContext(); 

    navigator.webkitGetUserMedia({audio: true}, function(stream) { 

     liveSource = context.createMediaStreamSource(stream); 
     liveSource.connect(context.destination); 

     var levelChecker = context.createJavaScriptNode(4096, 1 ,1); 
     liveSource.connect(levelChecker); 

     levelChecker.connect(context.destination); 

     levelChecker.onaudioprocess = function(e) { 

      var buffer = e.inputBuffer.getChannelData(0); 


     var maxVal = 0; 
     // Iterate through buffer to check if any of the |values| exceeds 1. 
     for (var i = 0; i < buffer.length; i++) { 
      if (maxVal < buffer[i]) { 
       maxVal = buffer[i]; 
      } 
     } 
     if(maxVal <= 0.01){ 
      console.log(0.0); 
     } else if(maxVal > 1){ 
      console.log(1); 
     } else if(maxVal > 0.2){ 
      console.log(0.2); 
     } else if(maxVal > 0.1){ 
      console.log(0.1); 
     } else if(maxVal > 0.05){ 
      console.log(0.05); 
     } else if(maxVal > 0.025){ 
      console.log(0.025); 
     } else if(maxVal > 0.01){ 
      console.log(0.01); 
     } 
}; 
}); 

} 

getLevel(); 

을하고 콘솔에이 붙여 손가락을 클릭 마이크 근처에서 (마이크 입력을 사용한다고 가정하면) 몇 초 동안 작동 한 다음 갑자기 멈 춥니 다. 오류를보고하지 않습니다. 아무도 이것이 왜 일어나는 지 설명 할 수 있습니까? 감사합니다.

레벨이 올바르게 작동하는 예제는 http://labs.dinahmoe.com/dynamicmusicengine/을 참조하십시오.

+0

이 버그 ...이 버그가 싫습니다. https://code.google.com/p/chromium/issues/detail?id=82795 – Brad

답변

3

나는 동일한 문제가 있었지만 결국 해결책을 얻었습니다! 문제는 javascript 노드 cicle입니다. 내가 먼저)를 createJavaScriptNode을 (변경하는 것이 좋습니다 : 당신이 scriptprocessor 또는 창에 onaudioProcess 콜백을 결합 할 수 있도록

var levelChecker = context.createScriptProcessor(4096, 1 ,1); 

가비지 컬렉터는 "levelChecker"변수와 그의 onaudioprocess에 문제가 있습니다. 여기에 성령 해결책 :

levelChecker.onaudioprocess = window.audioProcess = function(e) { ... 

그냥 그 라인에 window.audioProcess을 추가하고 더 이상 문신의 문제를 해결하지 않습니다. 당신을 위해 작동 http://lists.w3.org/Archives/Public/public-audio/2013JanMar/0304.html

희망 : 여기

당신은 추가 정보를 찾을 수 있습니다!

+0

감사합니다. 해결되었습니다! – Lars