diff --git a/AudioStreaming/Streaming/Audio Entry/AudioEntry.swift b/AudioStreaming/Streaming/Audio Entry/AudioEntry.swift index 7494784..539d848 100644 --- a/AudioStreaming/Streaming/Audio Entry/AudioEntry.swift +++ b/AudioStreaming/Streaming/Audio Entry/AudioEntry.swift @@ -37,6 +37,11 @@ class AudioEntry { return seekTime + (Double(framesState.played) / outputAudioFormat.sampleRate) } + var framesPlayed: Int { + lock.lock(); defer { lock.unlock() } + return framesState.played + } + var audioStreamFormat = AudioStreamBasicDescription() /// Hold the seek time, if a seek was requested diff --git a/AudioStreaming/Streaming/AudioPlayer/AudioPlayer.swift b/AudioStreaming/Streaming/AudioPlayer/AudioPlayer.swift index a892c35..be8a5f3 100644 --- a/AudioStreaming/Streaming/AudioPlayer/AudioPlayer.swift +++ b/AudioStreaming/Streaming/AudioPlayer/AudioPlayer.swift @@ -81,6 +81,16 @@ open class AudioPlayer { return entry.progress } + /// The number of audio frames that have been played + public var framesPlayed: Int { + guard playerContext.internalState != .pendingNext else { return 0 } + playerContext.entriesLock.lock() + let playingEntry = playerContext.audioPlayingEntry + playerContext.entriesLock.unlock() + guard let entry = playingEntry else { return 0 } + return entry.framesPlayed + } + public private(set) var customAttachedNodes = [AVAudioNode]() /// The current configuration of the player.