recreateNode method
void
recreateNode()
Implementation
void recreateNode() {
final currentUrl = _currentUrl;
if (currentUrl == null) {
return;
}
final p = player = web.HTMLAudioElement();
p.preload = 'auto';
p.src = currentUrl;
// As the AudioElement is created dynamically via script,
// features like 'stereo panning' need the CORS header to be enabled.
// See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
p.crossOrigin = 'anonymous';
p.loop = shouldLoop();
p.playbackRate = _currentPlaybackRate;
_setupStreams(p);
// Reuse or create AudioContext (Safari limits concurrent contexts)
_audioContext ??= web.AudioContext();
final source = _audioContext!.createMediaElementSource(p);
_sourceNode = source;
_gainNode = _audioContext!.createGain();
_gainNode!.gain.value = _currentVolume;
_stereoPanner = _audioContext!.createStereoPanner();
source.connect(_gainNode!);
_gainNode!.connect(_stereoPanner!);
_stereoPanner?.connect(_audioContext!.destination);
// Preload the source
p.load();
}