2014-12-05 34 views
1

我已经试图机架解决此我的大脑,我不知道是什么问题。有问题的音频可视化工具在Firefox(34.0.5)||问题与Firefox和网络音频API

我有一个音频播放器,自定义控件和JavaScript来激活这些控件工作得很好,直到我添加可视化Web音频API。

HTML:

<div id="audioContainer"> 
    <audio id="audio" controls preload="metadata"> 
     <source src="http://s3.amazonaws.com/halleonard-audio/guitarinstructor-clips/686095-1-Clip-Play.mp3" type="audio/mp3"> 
     <!-- Flash fallback --> 
     <object type="application/x-shockwave-flash" data="flash-player.swf?videoUrl=http://s3.amazonaws.com/halleonard-audio/guitarinstructor-clips/686095-1-Clip-Play.mp3" width="960" height="540"> 
     <param name="movie" value="flash-player.swf?videoUrl=http://s3.amazonaws.com/halleonard-audio/guitarinstructor-clips/686095-1-Clip-Play.mp3" /> 
     <param name="allowfullscreen" value="true" /> 
     <param name="wmode" value="transparent" /> 
     <param name="flashvars" value="controlbar=over&amp;image=img/poster.jpg&amp;file=flash-player.swf?videoUrl=http://s3.amazonaws.com/halleonard-audio/guitarinstructor-clips/686095-1-Clip-Play.mp3" /> 
     </object> 
     <!-- Offer download --> 
    </audio> 
    <ul id="media-controls" class="controls"> 
     <li><button id="playpause" type="button">Play/Pause</button></li> 
     <li><button id="rewind10" type="button">Rewind 10</button></li> 
     <li><button id="loop" type="button">Loop</button></li> 
     <li class="progress"> 
      <progress id="progress" value="0" min="0"> 
      <span id="progress-bar"></span> 
      </progress> 
     </li> 
     <li><button id="mute" type="button">Mute/Unmute</button></li> 
     <li><button id="volinc" type="button">Vol+</button></li> 
     <li><button id="voldec" type="button">Vol-</button></li> 
     <li><button id="fs" type="button">Fullscreen</button></li> 
    </ul> 
    <canvas id="visualizer"> 
</div> 

JS:

var supportsAudio = !!document.createElement('audio').canPlayType; 

if (supportsAudio) { 
    var audioContainer = document.getElementById('audioContainer'); 
    var audio = document.getElementById('audio'); 
    var mediaControls = document.getElementById('media-controls'); 
    var progress = document.getElementById('progress'); 
    var progressBar = document.getElementById('progress-bar'); 
    var canvas = document.getElementById('visualizer'); 

    // COMMENT OUT THE FOLLOWING 
    /* 
    var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 
    var analyser = audioCtx.createAnalyser(); 
    var bufferLength = analyser.frequencyBinCount; 
    var dataArray = new Uint8Array(bufferLength); 
    var source = audioCtx.createMediaElementSource(audio); 
    var bCtx = canvas.getContext('2d'); 
    source.connect(analyser); 
    analyser.connect(audioCtx.destination); 
    frameLooper(); 
    */ 

    // COMMENT OUT THE PRECEDING 

    audio.controls = false; 
    mediaControls.style.display = 'block'; 


    playpause.addEventListener('click', function(e) { 
     if (audio.paused || audio.ended) audio.play(); 
     else audio.pause(); 
    }); 

    rewind10.addEventListener('click', function(e){ 
     audio.currentTime = audio.currentTime - 10; 
    }); 

    loop.addEventListener('click', function(e){ 
     if (audio.loop == false){ 
      audio.loop = true; 
     } else{ 
      audio.loop = false; 
     } 
    }); 

    mute.addEventListener('click', function(e) { 
     audio.muted = !audio.muted; 
    }); 

    volinc.addEventListener('click', function(e) { 
     alterVolume('+'); 
    }); 
    voldec.addEventListener('click', function(e) { 
     alterVolume('-'); 
    }); 

    var alterVolume = function(dir) { 
     var currentVolume = Math.floor(video.volume * 10)/10; 
     if (dir === '+') { 
      if (currentVolume < 1) audio.volume += 0.1; 
     } 
     else if (dir === '-') { 
      if (currentVolume > 0) audio.volume -= 0.1; 
     } 
    } 

    audio.addEventListener('timeupdate', function() { 
     if (!progress.getAttribute('max')) progress.setAttribute('max', audio.duration); 
     progress.value = audio.currentTime; 
     progressBar.style.width = Math.floor((audio.currentTime/audio.duration) * 100) + '%'; 
    }); 

    audio.addEventListener('loadedmetadata', function() { 
     progress.setAttribute('max', audio.duration); 
    }); 

    progress.addEventListener('click', function(e) { 
     var pos = (e.pageX - this.offsetLeft)/this.offsetWidth; 
     audio.currentTime = pos * audio.duration; 
    }); 


    /* The following function runs the visualizer 

    function frameLooper(){ 
     window.requestAnimationFrame(frameLooper); 

     analyser.getByteFrequencyData(dataArray); 

     bCtx.clearRect(0, 0, canvas.width, canvas.height); 

     var grd = bCtx.createLinearGradient(0, canvas.height, 0, 0); 
     grd.addColorStop(0, 'rgba(31, 244, 31, 0.6)'); 
     grd.addColorStop(.75, 'rgba(233, 21, 31, 0.8)'); 
     bCtx.fillStyle = grd; 

     bars = 30; 
     for (var i = 0; i < bars; i++) { 
      bar_x = i * 10; 
      bar_width = 9; 
      bar_height = -(dataArray[i]/2); 
      bCtx.fillRect(bar_x, canvas.height, bar_width, bar_height); 
     } 
    } 
    */ 
} 

它工作正常,在Chrome中,但是当我把它到Firefox,控件不再工作,可视化不显示,但我没有收到ANY开发人员工具控制台中的错误。

回答

-1

只要改变audio.controls = true;http://jsfiddle.net/bhaxt194/

+0

哪里音频可视化你的jFiddle?这个问题的标题是有问题的*音频可视化*,我只是注释掉的代码可视化,所以你可以看到球员的工作,那么你取消注释,看看它是如何不再起作用。你在Firefox中试过这个吗?如何简单地将控制权重新解决我的问题? – Murphy1976 2014-12-05 17:52:47

+0

进一步我的观点,我已删除了这jFiddle所有评论:http://jsfiddle.net/murphy1976/15sg7wjd/请Chrome和Firefox浏览。 – Murphy1976 2014-12-05 19:43:05

+0

我也在我身边搜索了很多东西 - 我早上把我放到了http://jsfiddle.net/bhaxt194/ – toto21 2014-12-05 20:54:00