Simple Audio Visualizer
by Niklas Knaack
HTML
<a id="btStartAudioVisualization" class="bt">Start Audio Visualization</a>
CSS
html, body, div {
margin: 0;
padding: 0;
border: 0;
}
body {
overflow: hidden;
background-color:#000;
}
.bt {
-moz-box-shadow:inset 0px 1px 0px 0px #54a3f7;
-webkit-box-shadow:inset 0px 1px 0px 0px #54a3f7;
box-shadow:inset 0px 1px 0px 0px #54a3f7;
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #007dc1), color-stop(1, #0061a7));
background:-moz-linear-gradient(top, #007dc1 5%, #0061a7 100%);
background:-webkit-linear-gradient(top, #007dc1 5%, #0061a7 100%);
background:-o-linear-gradient(top, #007dc1 5%, #0061a7 100%);
background:-ms-linear-gradient(top, #007dc1 5%, #0061a7 100%);
background:linear-gradient(to bottom, #007dc1 5%, #0061a7 100%);
background-color:#007dc1;
-moz-border-radius:3px;
-webkit-border-radius:3px;
border-radius:3px;
border:1px solid #124d77;
display:inline-block;
cursor:pointer;
color:#ffffff;
font-family:Arial;
font-size:13px;
padding:6px 24px;
text-decoration:none;
text-shadow:0px 1px 0px #154682;
}
.bt:hover {
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #0061a7), color-stop(1, #007dc1));
background:-moz-linear-gradient(top, #0061a7 5%, #007dc1 100%);
background:-webkit-linear-gradient(top, #0061a7 5%, #007dc1 100%);
background:-o-linear-gradient(top, #0061a7 5%, #007dc1 100%);
background:-ms-linear-gradient(top, #0061a7 5%, #007dc1 100%);
background:linear-gradient(to bottom, #0061a7 5%, #007dc1 100%);
background-color:#0061a7;
}
.bt:active {
position:relative;
top:1px;
}
#btStartAudioVisualization {
position: absolute;
top: 10px;
left: 10px;
}
}
JavaScript
/*
Atlantis by Audionautix (http://audionautix.com) is part of the YouTube Audio Library (https://www.youtube.com/audiolibrary/music) and it's licensed under a Creative Commons license (https://creativecommons.org/licenses/by/3.0/deed.en_US).
*/
//---
var audio, audioContext, audioSrc;
var analyser, analyserBufferLength;
//---
var w;
var h;
var center2D;
var btStart;
var canvas;
var context;
var imageData;
var data;
var circleSegments = 512;
var circleHolder = [
{ radius:100, segments:circleSegments, points:[], color:{ r:237, g:254, b:255, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 1.00 },
{ radius:95, segments:circleSegments, points:[], color:{ r:217, g:254, b:255, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 2.00 },
{ radius:90, segments:circleSegments, points:[], color:{ r:118, g:164, b:179, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 4.00 },
{ radius:85, segments:circleSegments, points:[], color:{ r:58, g:105, b:121, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 8.00 },
{ radius:80, segments:circleSegments, points:[], color:{ r:41, g:79, b:90, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 10.00 },
{ radius:75, segments:circleSegments, points:[], color:{ r:24, g:50, b:63, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 12.00 },
{ radius:70, segments:circleSegments, points:[], color:{ r:12, g:25, b:31, a:255 }, thetaStart:0, thetaLength:Math.PI * 2, frequencyFactor: 14.00 }
];
//---
function init() {
canvas = document.createElement( 'canvas' );
canvas.addEventListener( 'mousedown', mouseDownHandler, false );
document.body.appendChild( canvas );
context = canvas.getContext( '2d' );
window.addEventListener( 'resize', onResize );
onResize();
for ( var i = 0, l = circleHolder.length; i < l; i++ ) {
drawCircle( center2D, circleHolder[ i ] );
}
context.putImageData(...