title: AudioBufferSourceNode starts playing only after being connected
body: <p>In my object, I got an <code>AudioBufferSourceNode</code> object (<code>this.bSrc</code>), connected to a gain node (<code>this.audioDestination</code>) that plays a (valid) <code>AudioBuffer</code> already stored in the object (<code>this.audioBuffer</code>).</p>
  
  <p>If <code>this.audioDestination</code> is connected to the audio context final destination <code>this.mainContext.destination</code> and I call the <code>start(0)</code> method on my <code>AudioBufferSourceNode</code> object (<code>this.bSrc</code>), it will play fine.</p>
  
  <p>If, instead, <code>this.audioDestination</code> is <em>not yet</em> connected to the Audio Context final destination, the buffer won't play (and it's ok), but its playback will be delayed until the connection is made (thus invalidating any assumption on when the AudioBufferSourceNode finishes playing).</p>
  
  <p>I'm currently implementing a plugin architecture, in which every plugin has its audioDestination gain node and doesn't (and must not) know whether it is indirectly connected to the final Audio Context destination. What seems logical to me is that the AudioBufferSourceNode should 'play' immediately and finish, even if it's not connected to the final Audio Context destination. But it seems it doesn't work like this. Am I right or am I getting it wrong? Is there some way to change this behaviour?</p>
  
  <p>Code:</p>
  
  <pre><code>/* Create the audio Context. */
  this.mainContext = new webkitAudioContext;
  
  /* Create an audio gain node */
  this.audioDestination = this.mainContext.createGainNode();
  
  /* [...] An AudioBuffer gets decoded and stored into this.audioBuffer*/
  
  /* Create an AudioBufferSourceNode and try to play it immediately */
  this.bSrc = this.audioContext.createBufferSource();
  this.bSrc.connect (this.audioDestination);
  this.bSrc.buffer = this.audioBuffer;
  this.bSrc.start(0);
  
  /* Create a callback for when the AudioBufferSourceNode finishes playing */
  if (!this.bSrc.loop) {
         var pbTimer = setTimeout(function() {
              this.playFinishedCallback();
          }.bind(this), this.audioBuffer.duration * 1000 / this.bSrc.playbackRate.value);
      }
  
   /* Connect this.audioDestination to the final AudioContext destination */
   /* If this statement is executed after the previous ones, playback will start NOW */
   this.audioDestination.connect(this.mainContext.destination);
  </code></pre>