AVAudioPlayer currentTime issue

前端 未结 3 1153
甜味超标
甜味超标 2020-12-21 18:48

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

3条回答
  •  隐瞒了意图╮
    2020-12-21 19:25

    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];
        }
    }  
    

提交回复
热议问题