AVAudioPlayer 间歇性启动延迟

问题描述

我做了一个 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 (将#修改为@)