Bug Fix: Set seek position when resuming paused

And a minor reoder of seek time reset code.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-02-15 21:46:46 -08:00
parent b8698ea125
commit dd5be9b117
4 changed files with 21 additions and 3 deletions

View file

@ -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 { - (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo {
PlaylistEntry *pe = (PlaylistEntry *)userInfo; PlaylistEntry *pe = (PlaylistEntry *)userInfo;
[pe setError:[status boolValue]]; [pe setError:[status boolValue]];

View file

@ -138,5 +138,6 @@
- (void)audioPlayer:(AudioPlayer *)player restartPlaybackAtCurrentPosition:(id)userInfo; - (void)audioPlayer:(AudioPlayer *)player restartPlaybackAtCurrentPosition:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player pushInfo:(NSDictionary *)info toTrack:(id)userInfo; - (void)audioPlayer:(AudioPlayer *)player pushInfo:(NSDictionary *)info toTrack:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player reportPlayCountForTrack:(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; - (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo;
@end @end

View file

@ -131,8 +131,12 @@
[bufferChain launchThreads]; [bufferChain launchThreads];
if(paused) if(paused) {
[self setPlaybackStatus:CogStatusPaused waitUntilDone:YES]; [self setPlaybackStatus:CogStatusPaused waitUntilDone:YES];
if(time > 0.0) {
[self updatePosition:userInfo];
}
}
} }
- (void)stop { - (void)stop {
@ -247,6 +251,10 @@
[self sendDelegateMethod:@selector(audioPlayer:restartPlaybackAtCurrentPosition:) withObject:previousUserInfo waitUntilDone:NO]; [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 { - (void)pushInfo:(NSDictionary *)info toTrack:(id)userInfo {
[self sendDelegateMethod:@selector(audioPlayer:pushInfo:toTrack:) withObject:info withObject:userInfo waitUntilDone:NO]; [self sendDelegateMethod:@selector(audioPlayer:pushInfo:toTrack:) withObject:info withObject:userInfo waitUntilDone:NO];
} }

View file

@ -164,24 +164,24 @@ static void *kInputNodeContext = &kInputNodeContext;
[bufferChain setVolume:0.0]; [bufferChain setVolume:0.0];
ConverterNode *converter = [bufferChain converter]; ConverterNode *converter = [bufferChain converter];
VisualizationNode *visualization = [bufferChain visualization];
DSPRubberbandNode *rubberband = [bufferChain rubberband]; DSPRubberbandNode *rubberband = [bufferChain rubberband];
DSPFSurroundNode *fsurround = [bufferChain fsurround]; DSPFSurroundNode *fsurround = [bufferChain fsurround];
DSPEqualizerNode *equalizer = [bufferChain equalizer]; DSPEqualizerNode *equalizer = [bufferChain equalizer];
DSPHRTFNode *hrtf = [bufferChain hrtf]; DSPHRTFNode *hrtf = [bufferChain hrtf];
DSPDownmixNode *downmix = [bufferChain downmix]; DSPDownmixNode *downmix = [bufferChain downmix];
VisualizationNode *visualization = [bufferChain visualization];
DLog(@"SEEKING! Resetting Buffer"); DLog(@"SEEKING! Resetting Buffer");
// This resets the converter's buffer // This resets the converter's buffer
[self resetBuffer]; [self resetBuffer];
[converter resetBuffer]; [converter resetBuffer];
[converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]]; [converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]];
[visualization resetBuffer];
[rubberband resetBuffer]; [rubberband resetBuffer];
[fsurround resetBuffer]; [fsurround resetBuffer];
[equalizer resetBuffer]; [equalizer resetBuffer];
[hrtf resetBuffer]; [hrtf resetBuffer];
[downmix resetBuffer]; [downmix resetBuffer];
[visualization resetBuffer];
DLog(@"Reset buffer!"); DLog(@"Reset buffer!");