From be941faf39bddbc02485373b44e5c0eaae60d217 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 11 Nov 2022 12:40:39 +0800 Subject: [PATCH] Handle case where AVQueuePlayer doesnt update the current item for shorter audio segments --- .../Sources/Services/AudioSession/AudioController.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift index c88d5b271..24bf26a2c 100644 --- a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift +++ b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift @@ -672,6 +672,14 @@ case .reset: if let playerItem = player.currentItem as? SpeechPlayerItem { let itemElapsed = playerItem.status == .readyToPlay ? CMTimeGetSeconds(playerItem.currentTime()) : 0 + if itemElapsed >= CMTimeGetSeconds(playerItem.duration) + 0.5 { + // Occasionally AV wont send an event for a new item starting for ~3s, if this + // happens we can try to manually update the time + if playerItem.speechItem.audioIdx + 1 < (document?.utterances.count ?? 0) { + currentAudioIndex = playerItem.speechItem.audioIdx + 1 + } + } + timeElapsed = durationBefore(playerIndex: playerItem.speechItem.audioIdx) + itemElapsed timeElapsedString = formatTimeInterval(timeElapsed)