fix(audio): survive navigation, clear stale state, silence noisy logs
Bug 1 — playback stops on navigation: WaveSurfer v7 creates its <audio> element inside the container div. When SongPage unmounts, the container is removed from the DOM, taking the audio element with it and stopping playback. Fix: AudioService owns a persistent hidden <audio> element on document.body and passes it to WaveSurfer via the `media` option. WaveSurfer uses it for playback but does not destroy it on WaveSurfer.destroy(), so audio survives any number of navigations. Bug 2 — stale playhead/duration when opening a new song: initialize() called destroyWaveSurfer() but never reset the store, so the previous song's currentTime, duration, and isPlaying leaked into the new song's load sequence. Fix: reset those three fields in the store immediately after tearing down the old WaveSurfer instance. cleanup() also now resets duration. Bug 3 — excessive console noise on mobile: Remove console.warn from play() (silent return when not ready) and from useWaveform's play() wrapper. Only console.error on actual errors remains. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -80,12 +80,8 @@ export function useWaveform(
|
||||
}, [options.url, options.songId, options.bandId]);
|
||||
|
||||
const play = () => {
|
||||
if (!audioService.isWaveformReady()) {
|
||||
console.warn('[useWaveform] play() called but not ready', { url: options.url });
|
||||
return;
|
||||
}
|
||||
audioService.play(options.songId ?? null, options.bandId ?? null)
|
||||
.catch(err => console.error('useWaveform.play failed:', err));
|
||||
.catch(err => console.error('[useWaveform] play failed:', err));
|
||||
};
|
||||
|
||||
const pause = () => {
|
||||
|
||||
Reference in New Issue
Block a user