diff --git a/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js b/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js index 8da52ff17..ddd7dc0a7 100644 --- a/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js +++ b/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js @@ -26,6 +26,10 @@ const JKSessionBackingTrackPlayer = ({ // Utility function to format milliseconds to M:SS format const formatTime = (ms) => { + // Handle undefined, null, or NaN values + if (ms == null || isNaN(ms) || ms < 0) { + return '0:00'; + } const seconds = Math.floor(ms / 1000); const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; @@ -42,8 +46,12 @@ const JKSessionBackingTrackPlayer = ({ // Fetch and set duration immediately when track loads try { const durationInMs = jamClient.SessionGetTracksPlayDurationMs(); - setDurationMs(durationInMs); - setDuration(formatTime(durationInMs)); + console.log('JKSessionBackingTrackPlayer: Duration from jamClient:', durationInMs, 'Type:', typeof durationInMs); + + // Ensure we have a valid number + const validDuration = (durationInMs != null && !isNaN(durationInMs) && durationInMs >= 0) ? durationInMs : 0; + setDurationMs(validDuration); + setDuration(formatTime(validDuration)); } catch (error) { console.error('Error fetching track duration:', error); setDuration('0:00'); @@ -66,10 +74,16 @@ const JKSessionBackingTrackPlayer = ({ const durationInMs = jamClient.SessionGetTracksPlayDurationMs(); const trackIsPlaying = jamClient.isSessionTrackPlaying(); - setCurrentPositionMs(positionMs); - setCurrentTime(formatTime(positionMs)); - setDurationMs(durationInMs); - setDuration(formatTime(durationInMs)); + console.log('JKSessionBackingTrackPlayer polling:', { positionMs, durationInMs, trackIsPlaying }); + + // Ensure valid numbers + const validPosition = (positionMs != null && !isNaN(positionMs) && positionMs >= 0) ? positionMs : 0; + const validDuration = (durationInMs != null && !isNaN(durationInMs) && durationInMs >= 0) ? durationInMs : 0; + + setCurrentPositionMs(validPosition); + setCurrentTime(formatTime(validPosition)); + setDurationMs(validDuration); + setDuration(formatTime(validDuration)); // Sync playing state if changed if (trackIsPlaying !== isPlaying) { @@ -353,7 +367,7 @@ const JKSessionBackingTrackPlayer = ({ onClick={handlePlay} disabled={!backingTrack} > - + Play/Pause