Search code examples
javascriptweb-audio-api

How to get browsers to release memory used by OfflineAudioContext?


I'm using OfflineAudioContext to render WebAudio signals into a buffer so I can analyze the results. When I do this repeatedly, it seems that the associated memory is never released, eventually causing the browser tab to crash.

Here's a minimal reproduction:

// render 10 minutes of audio into a big buffer
var ctx = new OfflineAudioContext(1, 44100 * 600, 44100)
var osc = ctx.createOscillator()
osc.start()
ctx.startRendering().then(buffer => {
    // attempt to clean up
    osc.stop()
    osc = null
    buffer = null
    ctx = null
})

Running that in a JS console will render a ~100MB buffer that never gets released. Running it repeatedly will chew up memory until the tab eventually crashes (tested in mac chrome/mozilla, windows chrome/mozilla/edge).

How can I get browsers to free the memory associated with an OfflineAudioContext?


Solution

  • This has been confirmed as a bug, with no workarounds. Until it's fixed, it looks like this is a fact of life.