I'm trying to use the AVAudioPlayer
with a slider in order to seek into a track (nothing complicated).
But I have a weird behavior... for some value of currentTime
(between 0 and trackDuration), the player stop playing the track, and goes into audioPlayerDidFinishPlaying:successfully:
with successfully to NO. And it did not go into audioPlayerDecodeErrorDidOccur:error:
It's like it can't read the time I'm giving to it.
For exemple the duration of the track is: 295.784424 seconds
I set the currentTime
to 55.0s (ie: 54.963878 or 54.963900 or 54.987755, etc... when printed as %f).
The "crashes" always happen when the currentTime
is 54.987755... and I really don't understand why...
So if you have any idea... ^^
I also struggled to get audio skipping working properly with 'AVAudioPlayer setCurrentTime:`
After alot of experimentation i've found a sequence that works reliably on the simulator and the device: (tested on OS3.1+)
// Skips to an audio position (in seconds) of the current file on the [AVAudioPlayer* audioPlayer] class instance
// This works correctly for a playing and paused audioPlayer
//
- (void) skipToSeconds:(float)position
{
@synchronized(self)
{
// Negative values skip to start of file
if ( position<0.0f )
position = 0.0f;
// Rounds down to remove sub-second precision
position = (int)position;
// Prevent skipping past end of file
if ( position>=(int)audioPlayer.duration )
{
NSLog( @"Audio: IGNORING skip to <%.02f> (past EOF) of <%.02f> seconds", position, audioPlayer.duration );
return;
}
// See if playback is active prior to skipping
BOOL skipWhilePlaying = audioPlayer.playing;
// Perform skip
NSLog( @"Audio: skip to <%.02f> of <%.02f> seconds", position, audioPlayer.duration );
// NOTE: This stop,set,prepare,(play) sequence produces reliable results on the simulator and device.
[audioPlayer stop];
[audioPlayer setCurrentTime:position];
[audioPlayer prepareToPlay];
// Resume playback if it was active prior to skipping
if ( skipWhilePlaying )
[audioPlayer play];
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With