{{song.title}}

  // This is only for display. Edit audio.js instead.
  
  var app = angular.module('angular-html5-audio', []);

  app.controller('MainCtrl', function($scope, $sce, $rootScope) {

    if (!window.AudioContext) {
      if (!window.webkitAudioContext) {
        alert('You might be viewing this on your mobile. Unfortunately, AudioContext is not supported on this browser');
      }
      window.AudioContext = window.webkitAudioContext;
    }

    window.requestAnimFrame = function() {
      return (
        window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function( /* function */ callback) {
          window.setTimeout(callback, 1000 / 60);
        }
      );
    }();

    // Audio controls
    $scope.playAudio = function(songTitle) {
      $scope.songTitle = $sce.trustAsResourceUrl(songTitle);
      var playPromise = $scope.myAudio.play();
      if (playPromise !== undefined) {
        playPromise.then(_ => {
          // Automatic playback started!
          // Show playing UI.
          // We can now safely pause video...
          $scope.myAudio.pause();
        })
        .catch(error => {
          // Auto-play was prevented
          // Show paused UI.
        });
      }
    };

    $scope.pauseAudio = function() {
      $scope.myAudio.pause();
    };

    $scope.stopAudio = function() {
      $scope.myAudio.pause();
      $scope.myAudio.currentTime = 0;
    };

    $scope.initMp3Player = function() {
      $scope.myAudio = document.querySelector('audio');

      window.AudioContext = AudioContext || window.webkitAudioContext;
      $scope.context = new AudioContext();

      $scope.analyser = $scope.context.createAnalyser();
      $scope.source = $scope.context.createMediaElementSource($scope.myAudio);

      $scope.fbc_array = new Uint8Array($scope.analyser.frequencyBinCount);
      $scope.analyser.smoothingTimeConstant = 0.8;
      // $scope.analyser.fftSize = 512;

      $scope.canvas = document.getElementById('analyser_render');
      $scope.ctx = $scope.canvas.getContext('2d');
      $rootScope.$emit('startAudio', {
        message: 'start audio'
      });

    };

    $rootScope.$on('startAudio', function(event, args) {
      $scope.source.connect($scope.analyser);
      $scope.source.connect($scope.context.destination);
      $scope.analyser.connect($scope.context.destination);
      frameLooper();
    });

    function frameLooper() {
      requestAnimFrame(frameLooper);
      renderSpectrum();
    }

    function renderSpectrum() {
    $scope.analyser.getByteFrequencyData($scope.fbc_array);
    $scope.ctx.clearRect(0, 0, $scope.canvas.width, $scope.canvas.height); // Clear the canvas
    $scope.ctx.fillStyle = '#00CCFF'; // Color of the bars
    bars = 1024;
    for (var i = 0; i < bars; i++) {
      bar_x = i * 2;
      bar_width = 1;
      bar_height = -($scope.fbc_array[i] / 2);
      var spectrumColors = $scope.ctx.createLinearGradient(0, 0, 0, 200);
      spectrumColors.addColorStop(0, "black");
      spectrumColors.addColorStop(0.5, "#FFA000");
      spectrumColors.addColorStop(0.3, "yellow");
      spectrumColors.addColorStop(0.8, "red");
      spectrumColors.addColorStop(1, "white");
      $scope.ctx.fillStyle = spectrumColors;
      $scope.ctx.fillRect(bar_x, $scope.canvas.height, bar_width, bar_height);
    }
  }

  window.addEventListener('load', $scope.initMp3Player, false);

  });