analyze = (index) => {
        const suspendTime = renderQuantumInSeconds * index;
        if (suspendTime < durationInSeconds) {
          offlineAudioContext.suspend(suspendTime).then(() => {
            const fftResult = new Float32Array(analyser.frequencyBinCount);
            analyser.getFloatFrequencyData(fftResult);
            this.fftResults.push(fftResult);
            analyze(index + 1);
          });
        }
        if (index === 1) {
          offlineAudioContext.startRendering();
        } else {
          offlineAudioContext.resume();
        }
      }
Modified from
https://stackoverflow.com/questions/75063715/using-the-web-audio-api-to-analyze-a-song-without-playing

We do this to populate FFT values for the audio if provided an `audioBuffer`
The reason to do this is that Safari fails when using `createMediaElementSource`
This has a non-zero RAM cost so we only opt-in to run it on Safari, Chrome is better