Advertisement
agunq

WaveForm Agunq :3

Nov 4th, 2014
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Paul Irish requestAnimationFrame Polyfill
  2. // http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
  3. window.requestAnimFrame = (function(){
  4.   return  window.requestAnimationFrame       ||
  5.           window.webkitRequestAnimationFrame ||
  6.           window.mozRequestAnimationFrame    ||
  7.           function( callback ){
  8.             window.setTimeout(callback, 1000 / 60);
  9.           };
  10. })();
  11.  
  12. var audioVisual = document.getElementById('audio-visual');
  13. console.log(wrap);
  14. // canvas stuff
  15. var canvas = document.getElementById('c');
  16. canvas_context = canvas.getContext('2d');
  17. canvas_context.fillStyle="#00FFFF";
  18. canvas_context.shadowBlur=10;
  19. canvas_context.shadowColor="#00FFFF";
  20.  
  21. // audio stuff
  22. var audio = new Audio();
  23. var audioSrc = 'http://media.soundcloud.com/stream/fesDlB1N5Y9C';
  24. audio.src = audioSrc;
  25. audio.controls = true;
  26. audio.autoplay = true;
  27. audio.loop = true;
  28. audio.id = 'a';
  29. audioVisual.appendChild(audio);
  30.  
  31. // analyser stuff
  32. var context = new webkitAudioContext();
  33. var analyser = context.createAnalyser();
  34. analyser.fftSize = 2048;
  35.  
  36. // connect the stuff up to eachother
  37. var source = context.createMediaElementSource(audio);
  38. source.connect(analyser);
  39. analyser.connect(context.destination);
  40. freqAnalyser();
  41.  
  42.  
  43. // draw the analyser to the canvas
  44. function freqAnalyser() {
  45.  window.requestAnimFrame(freqAnalyser);
  46.   var sum;
  47.   var average;
  48.   var bar_width;
  49.   var scaled_average;
  50.   var num_bars = 100;
  51.   var data = new Uint8Array(2048);
  52.   analyser.getByteFrequencyData(data);
  53.  
  54.   // clear canvas
  55.   canvas_context.clearRect(0, 0, canvas.width, canvas.height);
  56.   var bin_size = Math.floor(data.length / num_bars);
  57.   for (var i = 0; i < num_bars; i += 1) {
  58.     sum = 0;
  59.     for (var j = 0; j < bin_size; j += 1) {
  60.       sum += data[(i * bin_size) + j];
  61.     }
  62.     average = sum / bin_size;
  63.     bar_width = canvas.width / num_bars;
  64.     scaled_average = (average / 256) * canvas.height;
  65.     canvas_context.fillRect(i * bar_width, canvas.height + 150, bar_width - 5, - scaled_average);
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement