我正在尝试在iOS 8中使用新的AVAudioEngine。
看起来,player.scheduleFile()函数的completionHandler在声音文件播放完成之前被调用。我使用的声音文件长度为5秒,而println()信息大约出现在声音结束前1秒左右。
我是做错了什么还是对completionHandler的理解有误?
谢谢!
以下是一些代码:
看起来,player.scheduleFile()函数的completionHandler在声音文件播放完成之前被调用。我使用的声音文件长度为5秒,而println()信息大约出现在声音结束前1秒左右。
我是做错了什么还是对completionHandler的理解有误?
谢谢!
以下是一些代码:
class SoundHandler {
let engine:AVAudioEngine
let player:AVAudioPlayerNode
let mainMixer:AVAudioMixerNode
init() {
engine = AVAudioEngine()
player = AVAudioPlayerNode()
engine.attachNode(player)
mainMixer = engine.mainMixerNode
var error:NSError?
if !engine.startAndReturnError(&error) {
if let e = error {
println("error \(e.localizedDescription)")
}
}
engine.connect(player, to: mainMixer, format: mainMixer.outputFormatForBus(0))
}
func playSound() {
var soundUrl = NSBundle.mainBundle().URLForResource("Test", withExtension: "m4a")
var soundFile = AVAudioFile(forReading: soundUrl, error: nil)
player.scheduleFile(soundFile, atTime: nil, completionHandler: { println("Finished!") })
player.play()
}
}