我正在使用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'
答案 0 :(得分:5)
您可以交叉检查,同时开始播放设置为numberOfLoops
的音频0
,delegate
设置为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()
})
}
}