From dd5be9b11726c179f8dd339724e1ef677dd54d40 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Sat, 15 Feb 2025 21:46:46 -0800 Subject: [PATCH] Bug Fix: Set seek position when resuming paused And a minor reoder of seek time reset code. Signed-off-by: Christopher Snowhill --- Application/PlaybackController.m | 9 +++++++++ Audio/AudioPlayer.h | 1 + Audio/AudioPlayer.m | 10 +++++++++- Audio/Chain/InputNode.m | 4 ++-- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index cc2dfe0eb..669a353b3 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -878,6 +878,15 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) { } } +- (void)audioPlayer:(AudioPlayer *)player updatePosition:(id)userInfo { + if(userInfo) { + PlaylistEntry *pe = (PlaylistEntry *)userInfo; + if([pe current]) { + [self updatePosition:userInfo]; + } + } +} + - (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo { PlaylistEntry *pe = (PlaylistEntry *)userInfo; [pe setError:[status boolValue]]; diff --git a/Audio/AudioPlayer.h b/Audio/AudioPlayer.h index fc90ff69c..db22efcc8 100644 --- a/Audio/AudioPlayer.h +++ b/Audio/AudioPlayer.h @@ -138,5 +138,6 @@ - (void)audioPlayer:(AudioPlayer *)player restartPlaybackAtCurrentPosition:(id)userInfo; - (void)audioPlayer:(AudioPlayer *)player pushInfo:(NSDictionary *)info toTrack:(id)userInfo; - (void)audioPlayer:(AudioPlayer *)player reportPlayCountForTrack:(id)userInfo; +- (void)audioPlayer:(AudioPlayer *)player updatePosition:(id)userInfo; - (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo; @end diff --git a/Audio/AudioPlayer.m b/Audio/AudioPlayer.m index ef5632b10..20a1e3fe4 100644 --- a/Audio/AudioPlayer.m +++ b/Audio/AudioPlayer.m @@ -131,8 +131,12 @@ [bufferChain launchThreads]; - if(paused) + if(paused) { [self setPlaybackStatus:CogStatusPaused waitUntilDone:YES]; + if(time > 0.0) { + [self updatePosition:userInfo]; + } + } } - (void)stop { @@ -247,6 +251,10 @@ [self sendDelegateMethod:@selector(audioPlayer:restartPlaybackAtCurrentPosition:) withObject:previousUserInfo waitUntilDone:NO]; } +- (void)updatePosition:(id)userInfo { + [self sendDelegateMethod:@selector(audioPlayer:updatePosition:) withObject:userInfo waitUntilDone:NO]; +} + - (void)pushInfo:(NSDictionary *)info toTrack:(id)userInfo { [self sendDelegateMethod:@selector(audioPlayer:pushInfo:toTrack:) withObject:info withObject:userInfo waitUntilDone:NO]; } diff --git a/Audio/Chain/InputNode.m b/Audio/Chain/InputNode.m index d2dd473f8..2f91ed71f 100644 --- a/Audio/Chain/InputNode.m +++ b/Audio/Chain/InputNode.m @@ -164,24 +164,24 @@ static void *kInputNodeContext = &kInputNodeContext; [bufferChain setVolume:0.0]; ConverterNode *converter = [bufferChain converter]; - VisualizationNode *visualization = [bufferChain visualization]; DSPRubberbandNode *rubberband = [bufferChain rubberband]; DSPFSurroundNode *fsurround = [bufferChain fsurround]; DSPEqualizerNode *equalizer = [bufferChain equalizer]; DSPHRTFNode *hrtf = [bufferChain hrtf]; DSPDownmixNode *downmix = [bufferChain downmix]; + VisualizationNode *visualization = [bufferChain visualization]; DLog(@"SEEKING! Resetting Buffer"); // This resets the converter's buffer [self resetBuffer]; [converter resetBuffer]; [converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]]; - [visualization resetBuffer]; [rubberband resetBuffer]; [fsurround resetBuffer]; [equalizer resetBuffer]; [hrtf resetBuffer]; [downmix resetBuffer]; + [visualization resetBuffer]; DLog(@"Reset buffer!");