Search code examples
iosswiftavfoundationavaudioplayer

How to track the number of loops in AVAudioFoundation


I am making an audio player in my iOS project. I setup the play(audioOfUrl:URL, for times:Int)method by passing the name of the url and how many times the audio file will be play as following:

func play(audioOfUrl:URL, for times:Int) {

    let urlPath = audioOfUrl
    loopsLeftOver = times
    do {

        let audio = try AVAudioPlayer.init(contentsOf: urlPath)
        audioPlayer = audio
        audio.play()
        audio.numberOfLoops = times - 1


    } catch let error {
        print(error.localizedDescription)
    }
}

there will be a pause() and resume() as well, What I need to do is keep track of how many loops the audio player leftover. For example, if I call the play method like this:

play(audioOfUrl:audioUrl, for times:5)

I need to keep eyes on the times leftover as the audio player running.

I try to use the AVAudioPlayerDelegate method, but it is not working, how to keep eyes on the audio.numberOfLoops? Thanks in advance.


Solution

  • You can subscribe for AVPlayerItemDidPlayToEndTime notification and count how many times the handler of this notification has been called.

    NotificationCenter.default.addObserver(self, selector:#selector(playerItemDidReachEnd(_:)),
                                name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
                                object: audioPlayer.currentItem)