SWIFT中的audioPlayerDidFinishPlaying函数

时间:2015-10-28 22:43:33

标签: ios iphone swift avfoundation

我正在使用AVFoundation框架在swift中编写一个简单的播放器。除了我的播放器一遍又一遍地播放同一首歌之外,一切似乎都在起作用。我的播放列表中只有一首歌,所以这很有道理。我要做的是检查 audioPlayerDidFinishPlaying 标志以确保它已完成播放然后我将停止。我不确定如何实现调用以获取此处的标志是我的代码。

    mp3Player?.play()
    **if (mp3Player?.audioPlayerDidFinishPlaying:successfully) {**
    mp3Player?.stop()
 }

在目标c中获取标志的正确方法是:

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"audioPlayerDidFinishPlaying");
}

任何人都可以解释如何在SWIFT中实现相同的功能吗?这是我在SWIFT的第一个项目。我尝试在SWIFT中阅读有关void函数但没有运气。

我得到的错误是无法将'AVAudioPlayer.Type'类型的值转换为预期的参数类型'AVAudioPlayer'

2 个答案:

答案 0 :(得分:5)

您可以交叉检查,同时开始播放设置为numberOfLoops的音频0delegate设置为self或玩家正在播放的控制器。

   mp3Player?.numberOfLoops = 0
   mp3Player?.delegate = self

在同一个类中,实现delegate的{​​{1}}方法,如下所示。

AVAudioPlayer

答案 1 :(得分:0)

我能够在mp3播放器类中实现如下解决方案。

func audioPlayerDidFinishPlaying(player: AVAudioPlayer,
    successfully flag: Bool){
        if flag == true {
        ++self.numberOfLoops
        GlobalVariables.NumberOfLoops = numberOfLoops
        numberOfLoopsReq = GlobalVariables.NumberOfLoopsRequired
        player.stop()
        if numberOfLoops <  numberOfLoopsReq {
                // delay before and play
                let delay = GlobalVariables.DelayBeforeSong * Double(NSEC_PER_SEC)// nanoseconds per second
                let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
                dispatch_after(delayTime, dispatch_get_main_queue(),{
                    self.player!.play()
                    }) 
                                             }
                                          }