2013-05-17 64 views
1

該代碼應該流式傳輸任何網址並提供音頻的可視化。不幸的是,可視化工具不起作用。可視化依賴於來自AnalyzerNode的數據,該數據總是返回空數據。爲什麼這個代碼中的AnalyserNode沒有工作? I .connect()後,源節點上的numberOfOutputs增加,但AnalyserNode上的numberOfInputs不變。JavaScript網絡音頻API分析器節點不工作

<html> 
    <head> 
     <script> 
      var context; 
      var source; 
      var analyser; 
      var canvas; 
      var canvasContext; 

      window.addEventListener('load', init, false); 
      function init() { 
       try { 
        // Fix up for prefixing 
        window.AudioContext = window.AudioContext || window.webkitAudioContext; 

        window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || 
          window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; 

        context = new AudioContext(); 
        analyser = context.createAnalyser(); 
        canvas = document.getElementById("analyser"); 
        canvasContext = canvas.getContext('2d'); 
       } 
       catch(e) { 
        alert(e); 
        alert('Web Audio API is not supported in this browser'); 
       } 
      } 

      function streamSound(url) { 
       var audio = new Audio(); 
       audio.src = url; 
       audio.controls = true; 
       audio.autoplay = true; 
       source = context.createMediaElementSource(audio); 
       source.connect(analyser); 
       analyser.connect(context.destination); 
       document.body.appendChild(document.createElement('br')); 
       document.body.appendChild(audio); 
       render(); 
      } 

      function render(){ 
       window.requestAnimationFrame(render); 
       //Get the Sound data 
       var freqByteData = new Uint8Array(analyser.frequencyBinCount); 
       analyser.getByteFrequencyData(freqByteData); 
       //we Clear the Canvas 
       canvasContext.clearRect(0, 0, canvas.width, canvas.height); 
       //draw visualization 
       for(var i=0;i<analyser.frequencyBinCount;i++){ 
        canvasContext.fillRect(i*2,canvas.height,1,-freqByteData[i]); 
        //Data seems to always be zero 
        if(freqByteData[i] != 0) { 
         alert(freqByteData[i]); 
        } 
       } 
      } 
     </script> 
    </head> 
    <body> 
     <button onclick="streamSound(document.getElementById('url').value)"> Stream sound</button> 
     <input id="url" size='77' value="Enter a URL to Stream"> 
     <br /> 
     <canvas id="analyser" width="600" height="200"></canvas> 
    </body> 
</html> 

回答