feat(01-01): add 500ms playback monitoring with jamClient polling
- Polls jamClient.SessionCurrrentPlayPosMs() every 500ms when playing - Updates currentTime and duration displays with formatted values - Syncs isPlaying state with jamClient.isSessionTrackPlaying() - Cleans up interval on pause/stop to prevent memory leaks - Error handling logs to console but continues polling Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
df94ec7d08
commit
e33983e150
|
|
@ -39,6 +39,41 @@ const JKSessionBackingTrackPlayer = ({
|
|||
}
|
||||
}, [isOpen, backingTrack]);
|
||||
|
||||
// Playback monitoring with 500ms polling
|
||||
useEffect(() => {
|
||||
let intervalId = null;
|
||||
|
||||
if (isPlaying && jamClient) {
|
||||
// Start polling when playing
|
||||
intervalId = setInterval(() => {
|
||||
try {
|
||||
if (!jamClient) return;
|
||||
|
||||
const positionMs = jamClient.SessionCurrrentPlayPosMs();
|
||||
const durationMs = jamClient.SessionGetTracksPlayDurationMs();
|
||||
const trackIsPlaying = jamClient.isSessionTrackPlaying();
|
||||
|
||||
setCurrentTime(formatTime(positionMs));
|
||||
setDuration(formatTime(durationMs));
|
||||
|
||||
// Sync playing state if changed
|
||||
if (trackIsPlaying !== isPlaying) {
|
||||
setIsPlaying(trackIsPlaying);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error polling playback status:', error);
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// Cleanup: clear interval on pause/stop or unmount
|
||||
return () => {
|
||||
if (intervalId) {
|
||||
clearInterval(intervalId);
|
||||
}
|
||||
};
|
||||
}, [isPlaying, jamClient, backingTrack]);
|
||||
|
||||
const handlePlay = async () => {
|
||||
try {
|
||||
if (isPlaying) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue