问题描述
我做了一个 AVAudioPlayer
的基本实现:
do {
try AVAudioSession.sharedInstance().setMode(.default)
try AVAudioSession.sharedInstance().setActive(true,options: .notifyOthersOnDeactivation)
guard let urlStringBoltDown = urlStringBoltDown else {
return
}
player4 = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlStringBoltDown))
guard let player4 = player4 else {
return
}
player4.prepareToPlay()
} catch {
print("oops")
}
播放声音时(大约 0.5 秒长),我有延迟和滞后。在 this question 的帮助下,我设法摆脱了延迟:
DispatchQueue.global().async {
self.player4?.play()
}
尽管在 player4.prepareToPlay()
初始化后立即调用 ViewDidLoad()
(如多个答案中所建议的,例如:link),但我在第一次运行时仍然有延迟(大约 2 秒) .这种延迟会在播放一次声音后消失,但不会永久消失。如果我在大约 3 秒内再次在此特定播放器或任何其他播放器上播放声音,则没有延迟。否则,它会再次出现。
我试过了:
- 在播放每个声音后调用
prepareToPlay()
(无) - 在
prepareToPlay()
中调用ViewDidAppear()
(无) - 播放并在每次发出声音后停止播放器(建议 here)。同样,这消除了接下来 3 秒左右的每
.play()
延迟,在具有相同延迟之后的任何延迟
如果我能在调用 prepareToPlay()
后检查播放器是否真的准备好播放真的很有帮助,但我只找到了检查 AVPlayer
状态的方法。如果有人能指出如何做到这一点,我可能会解决这个问题,或者至少为这个问题添加一些有价值的信息。
我只是想要一种永久消除延迟的方法。任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)