我正在尝试在 iOS 8 中使用新的 AVAudioEngine。
看起来player.scheduleFile()的completionHandler被调用before声音文件已播放完毕。
我正在使用长度为 5 秒的声音文件——并且println()
- 声音结束前约 1 秒出现消息。
我做错了什么或者我误解了completionHandler的想法吗?
Thanks!
这是一些代码:
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()
}
}
我看到同样的行为。
根据我的实验,我相信一旦缓冲区/段/文件被“调度”,就会调用回调,而不是在播放完成时调用。
尽管文档明确指出:
“在缓冲区完全播放或播放器停止后调用。可能为零。”
所以我认为这要么是一个错误,要么是不正确的文档。不知道哪个
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)