From 45e6edb28e5b09e8cf5404b6c6eab6a085a90819 Mon Sep 17 00:00:00 2001 From: Atli Thorbjornsson Date: Mon, 8 Apr 2013 10:49:47 +0000 Subject: [PATCH] Created a new internal state - AudioPlayerInternalStateRebuffering, it's mostly cosmetic so users of Audjustable are informed when playback pauses because the buffers have dried up --- Audjustable/Classes/AudioPlayer/AudioPlayer.h | 5 +++-- Audjustable/Classes/AudioPlayer/AudioPlayer.m | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Audjustable/Classes/AudioPlayer/AudioPlayer.h b/Audjustable/Classes/AudioPlayer/AudioPlayer.h index 6470d76..8f2f551 100644 --- a/Audjustable/Classes/AudioPlayer/AudioPlayer.h +++ b/Audjustable/Classes/AudioPlayer/AudioPlayer.h @@ -49,8 +49,9 @@ typedef enum AudioPlayerInternalStatePlaying = (1 << 1) | AudioPlayerInternalStateRunning, AudioPlayerInternalStateStartingThread = (1 << 2) | AudioPlayerInternalStateRunning, AudioPlayerInternalStateWaitingForData = (1 << 3) | AudioPlayerInternalStateRunning, - AudioPlayerInternalStateWaitingForQueueToStart = (1 << 5) | AudioPlayerInternalStateRunning, - AudioPlayerInternalStatePaused = (1 << 6) | AudioPlayerInternalStateRunning, + AudioPlayerInternalStateWaitingForQueueToStart = (1 << 4) | AudioPlayerInternalStateRunning, + AudioPlayerInternalStatePaused = (1 << 5) | AudioPlayerInternalStateRunning, + AudioPlayerInternalStateRebuffering = (1 << 6) | AudioPlayerInternalStateRunning, AudioPlayerInternalStateStopping = (1 << 7), AudioPlayerInternalStateStopped = (1 << 8), AudioPlayerInternalStateDisposed = (1 << 9), diff --git a/Audjustable/Classes/AudioPlayer/AudioPlayer.m b/Audjustable/Classes/AudioPlayer/AudioPlayer.m index 99ff92a..e59d234 100644 --- a/Audjustable/Classes/AudioPlayer/AudioPlayer.m +++ b/Audjustable/Classes/AudioPlayer/AudioPlayer.m @@ -338,6 +338,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ case AudioPlayerInternalStateWaitingForData: case AudioPlayerInternalStateWaitingForQueueToStart: case AudioPlayerInternalStatePlaying: + case AudioPlayerInternalStateRebuffering: newState = AudioPlayerStatePlaying; break; case AudioPlayerInternalStateStopping: @@ -872,6 +873,11 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ signal = YES; } + if (!audioQueueFlushing && [self progress] > 4.0 && numberOfBuffersUsed == 0 ) { + self.internalState = AudioPlayerInternalStateRebuffering; + } + + if (!audioQueueFlushing) { if (entry != nil) @@ -1018,6 +1024,11 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ } } + if (self.internalState == AudioPlayerInternalStateRebuffering && numberOfBuffersUsed >= AudioPlayerBuffersNeededToStart) { + self.internalState =AudioPlayerInternalStatePlaying; + } + + if (++fillBufferIndex >= audioQueueBufferCount) { fillBufferIndex = 0;