title: JavaScript Web Audio: cannot properly decode audio data?
body: <p>I'm trying to use the Web Audio API in JavaScript to load a sound into a buffer and play it. Unfortunately it doesn't work and I get the following error:</p>
  
  <pre><code>Uncaught TypeError: Failed to set the 'buffer' property on 'AudioBufferSourceNode':
  The provided value is not of type 'AudioBuffer'.
  </code></pre>
  
  <p>I can pinpoint which line is giving me the error, but I don't know why. Here is the relevant code if it helps:</p>
  
  <pre><code>var audioContext;
  var playSoundBuffer;
  
  function init() {
      window.AudioContext = window.AudioContext || window.webkitAudioContext;
      audioContext = new AudioContext();
  
      loadNote();
  }
  
  function loadNote() {
      var request = new XMLHttpRequest();
      request.open("GET", "./sounds/topE.wav", true);
      request.responseType = "arraybuffer";
      request.onload = function() {
          audioContext.decodeAudioData(request.response, function(buffer) {
              playSoundBuffer = buffer;
          }, function(error) {
              console.error("decodeAudioData error", error);
          });
      };
      request.send();
  
      playSound();
  }
  
  function playSound() {
      var source = audioContext.createBufferSource();
      source.buffer = playSoundBuffer;       // This is the line that generates the error
      source.connect(audioContext.destination);
      source.start(0);
  }
  </code></pre>
  
  <p>I believe the decodeAudioData method returns an AudioBuffer to its first callback function (its second parameter). I tried to save this AudioBuffer to the "playSoundBuffer" and then play it, but I get that error and I'm not sure why. Any help would be greatly appreciated.</p>