var AudioContext = AudioContext || webkitAudioContext; var context = new AudioContext(); var audioBuffer; var analyser = context.createAnalyser(); analyser.fftSize = 256; analyser.smoothingTimeConstant = .75; var frequencyData = new Uint8Array( analyser.fftSize ); analyser.connect( context.destination ); var canvas = document.createElement( 'canvas' ), ctx = canvas.getContext( '2d' ); canvas.width = 1024; canvas.height = 256; canvas.style.border = '1px solid #666' document.body.appendChild( canvas ); function loadSound() { var request = new XMLHttpRequest(); request.open( 'GET', 'sound.mp3', true ); request.responseType = 'arraybuffer'; request.onload = function() { context.decodeAudioData( request.response, function( buffer ) { audioBuffer = buffer; window.addEventListener( 'click', playSound ); }, function() { console.log( 'error' ); } ); }; request.send(); } function playSound() { var source = context.createBufferSource(); source.buffer = audioBuffer; source.playbackRate.value = .8 + Math.random() * .4; source.connect( analyser ); source.start( 0 ); } function update() { requestAnimationFrame( update ); analyser.getByteFrequencyData( frequencyData ); ctx.clearRect( 0, 0, canvas.width, canvas.height ); for( var j = 0, m = frequencyData.length; j < m; j++ ) { ctx.fillRect( j * ( canvas.width / m ), canvas.height, canvas.width / m, - frequencyData[ j ] * canvas.height / 255 ); } } loadSound(); update();