fix: seek when changing track

This commit is contained in:
Joakim Ramer 2023-02-19 17:42:45 +01:00
parent c9ad0c7897
commit 3318f3501c
No known key found for this signature in database
GPG key ID: 3DD9039EF02C0573

View file

@ -161,6 +161,9 @@ class AudioPlayer: NSObject {
let trackEnd = startOffset + duration
if (time < trackEnd.rounded(.down)) {
return index
} else if (index == self.allPlayerItems.count - 1) {
// Seeking past end of last item
return index
}
}
return 0
@ -368,11 +371,6 @@ class AudioPlayer: NSObject {
guard let playbackSession = self.getPlaybackSession() else { return }
let currentTrack = playbackSession.audioTracks[self.currentTrackIndex]
let ctso = currentTrack.startOffset ?? 0.0
let trackEnd = ctso + currentTrack.duration
logger.log("SEEK: Seek current track END = \(trackEnd)")
let indexOfSeek = getItemIndexForTime(time: to)
logger.log("SEEK: Seek to index \(indexOfSeek) | Current index \(self.currentTrackIndex)")
@ -393,11 +391,22 @@ class AudioPlayer: NSObject {
}
}
seekInCurrentTrack(to: to, playbackSession: playbackSession)
setupQueueItemStatusObserver()
} else {
logger.log("SEEK: Seeking in current item \(to)")
let currentTrackStartOffset = playbackSession.audioTracks[self.currentTrackIndex].startOffset ?? 0.0
let seekTime = to - currentTrackStartOffset
seekInCurrentTrack(to: to, playbackSession: playbackSession)
}
// Only for use in here where we handle track selection
func seekInCurrentTrack(to: Double, playbackSession: PlaybackSession) {
let currentTrack = playbackSession.audioTracks[self.currentTrackIndex]
let ctso = currentTrack.startOffset ?? 0.0
let trackEnd = ctso + currentTrack.duration
logger.log("SEEK: Seeking in current item \(to) (track START = \(ctso) END = \(trackEnd))")
let boundedTime = min(max(to, ctso), trackEnd)
let seekTime = boundedTime - ctso
DispatchQueue.runOnMainQueue {
self.audioPlayer.seek(to: CMTime(seconds: seekTime, preferredTimescale: 1000)) { [weak self] completed in