我試圖使用新AVAudioEngine iOS中8completionHandler()被調用太早
它看起來像player.scheduleFile的completionHandler()被調用前的聲音文件完成比賽。
我使用長度爲5s的聲音文件 - 和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()
}
}
作品作爲一種解決方法。謝謝! – Oliver 2015-04-21 17:44:12
很好的解決方法。 – 2015-06-13 21:40:27
喜歡它。奇蹟般有效! – 2016-01-31 21:43:12