我正在尝试播放不同的声音文件,并希望在其中一个声音文件播放完成时收到通知。所以我集成了委托方法:
extension ViewController: AVAudioPlayerDelegate {
func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
if (player.url!.isEqual(self.sndAlgo1)) {
self.audioController.audioPlayer!.stop()
self.lblInstruction.text = "Alarmieren Sie den Notruf"
}
if (player.url!.isEqual(self.sndNotruf)) {
self.audioController.audioPlayer!.stop()
self.lblInstruction.text = "Notruf wurde abgesetzt"
}
}
}为了调用soundfiles,我为每个soundfiles创建了一个属性:
var sndAlgo1 = NSURL(string: "")!
var sndAlgo2 = NSURL(string: "")!
var sndNotruf = NSURL(string: "")!
func initializeSounds() {
self.sndAlgo1 = self.audioController.createAudioFilePath("Algo1", type: "mp3")
self.sndAlgo2 = self.audioController.createAudioFilePath("Algo2", type: "mp3")
self.sndNotruf = self.audioController.createAudioFilePath("Notruf", type: "mp3")
}
override func viewDidAppear(animated: Bool) {
self.audioController.audioPlayer?.delegate = self
self.audioController.startAudioPlayerWithURL(self.sndAlgo1)
}
@IBAction func btnEmergencyPressed(sender: UIButton) {
self.lblInstruction.text = "Bitte warten"
self.audioController.startAudioPlayerWithURL(self.sndNotruf)
}声音播放正常,但委托方法仅被调用一次。我会猜到它是在每次使用播放器之后调用的。我是不是用错了方法?
最好的
发布于 2015-09-22 03:56:56
我猜您的方法startAudioPlayerWithURL创建了一个新的AVAudioPlayer实例。
每次创建新实例时,都需要设置AVPlayer的委托。
您的代码将如下所示:
var sndAlgo1 = NSURL(string: "")!
var sndAlgo2 = NSURL(string: "")!
var sndNotruf = NSURL(string: "")!
func initializeSounds() {
self.sndAlgo1 = self.audioController.createAudioFilePath("Algo1", type: "mp3")
self.sndAlgo2 = self.audioController.createAudioFilePath("Algo2", type: "mp3")
self.sndNotruf = self.audioController.createAudioFilePath("Notruf", type: "mp3")
}
override func viewDidAppear(animated: Bool) {
self.audioController.startAudioPlayerWithURL(self.sndAlgo1)
self.audioController.audioPlayer?.delegate = self
}
@IBAction func btnEmergencyPressed(sender: UIButton) {
self.lblInstruction.text = "Bitte warten"
self.audioController.startAudioPlayerWithURL(self.sndNotruf)
self.audioController.audioPlayer?.delegate = self
}我不确定它是否有效,因为我不知道你的startAudioPlayerWithURL方法是做什么的。
要改进代码,可以将委托赋予audioController,并在每次调用startAudioPlayerWithURL时重用它
https://stackoverflow.com/questions/32703315
复制相似问题