singlow 2018-11-19
<canvas id="canvas" width="400" height="100"></canvas><br/> <input type="button" onclick="audio.play()" value="播放" /> <input type="button" onclick="audio.pause()" value="暂停" /> <script> canvas.style.border="1px solid #CCC"; var AudioContext=AudioContext||webkitAudioContext; var context=new AudioContext; //加载媒体 var audio=new Audio("SuperMario.mp3"); //创建节点 var source=context.createMediaElementSource(audio); var analyser=context.createAnalyser(); //连接:source → analyser → destination source.connect(analyser); analyser.connect(context.destination); //Canvas初始化 var width=canvas.width,height=canvas.height; var g=canvas.getContext("2d"); g.translate(0.5,0.5); //计算出采样比率44100所需的缓冲区长度 var length=analyser.frequencyBinCount*44100/context.sampleRate|0; //创建数据 var output=new Uint8Array(length); //播放帧 (function callee(e){ analyser.getByteFrequencyData(output); //将缓冲区的数据绘制到Canvas上 g.clearRect(-0.5,-0.5,width,height); g.beginPath(),g.moveTo(0,height); for(var i=0;i<width;i++) g.lineTo(i,height-height*output[Math.round(length*i/width)]/255); g.lineTo(i,height),g.fill(); //请求下一帧 requestAnimationFrame(callee); })(); //播放 audio.play(); </script>