Should I disconnect nodes that can't be used anymore?

Viewed 1417

I'm experimenting with Web Audio, and I made a function to play a note.

var context = new (window.AudioContext || window.webkitAudioContext)()

var make_triangle = function(destination, frequency, start, duration) {
  var osc = context.createOscillator()
  osc.type = "triangle"
  osc.frequency.value = frequency
  
  var gain = context.createGain()
  
  osc.connect(gain)
  gain.connect(destination)
  
  // timing
  osc.start(start)
  osc.stop(start + 2*duration) // this line is discussed later
  gain.gain.setValueAtTime(0.5, start)
  gain.gain.linearRampToValueAtTime(0, start+duration)
}

Usage is something like this:

make_triangle(context.destination, 440, context.currentTime+1, 1)

This works just fine.

Firefox has a Web Audio tab in its developer console. When I play the sound, the Oscillator and Gain show up in the graph. Without the osc.stop(start + 2*duration) line, these linger forever. With the osc.stop(start + 2*duration) line, the Oscillator goes away, but the Gain stays connected to the AudioDestination forever.

I don't want to cause a memory leak or performance hit from having lots of old things still connected. To what extent do I need to clean up after creating nodes? Should I stop the oscillator? Disconnect everything? Both?

2 Answers
Related