gpt4 book ai didi

ios8 - 过早调用 AVAudioPlayerNode.scheduleFile() 的 completionHandler

转载 作者:行者123 更新时间:2023-12-04 13:08:12 24 4
gpt4 key购买 nike

我正在尝试在 iOS 8 中使用新的 AVAudioEngine。

看起来 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()
}
}

最佳答案

我看到了同样的行为。

从我的实验来看,我相信一旦缓冲区/段/文件被"dispatch",而不是在它完成播放时调用回调。

尽管文档明确指出:
“在缓冲区完全播放或播放器停止后调用。可能为零。”

所以我认为这是一个错误或不正确的文档。不知道哪个

关于ios8 - 过早调用 AVAudioPlayerNode.scheduleFile() 的 completionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com