gpt4 book ai didi

ios - 有没有什么方法可以在不中断 UI 的情况下实现 avaudiosession .duckothers。 swift 2.0

转载 作者:行者123 更新时间:2023-11-28 06:52:09 27 4
gpt4 key购买 nike

我在使用以下代码播放 avaudioplayer 之前激活闪避。

do {

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, withOptions: .DuckOthers)

} catch let error as NSError {

print(error.localizedDescription)

}

do {

try AVAudioSession.sharedInstance().setActive(true)

} catch let error as NSError {

print(error.localizedDescription)

}

我使用 audioPlayerDidFinishPlaying 来停止闪避:

do {

try AVAudioSession.sharedInstance().setActive(false)

} catch let error as NSError {

print(error.localizedDescription)

}

Ducking 已正确激活和停用,但在激活 Ducking 时 UI 会暂时停滞,这是一个问题。

我一直在尝试使用 dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0) 异步实现回避,但没有取得任何成功,即使在强制尝试时也是如此。尽管尝试使用异步线程,UI 仍然停滞。

最佳答案

遇到了同样的问题。对于 Ducking,.setActive(true).setActive(false) 的 UI 中断似乎都是 ~500ms。到目前为止,我发现的最佳解决方案是使用完成和通知将 UI 和 .setActive() 中的更改完全分开。

我是这样解决问题的:

  • 对 UI 进行所有更改(所有可能的更改在听到声音之前仍然有意义)
  • 然后在完成这些更改后,执行 .setActive(true)
  • 然后 .play()
  • 然后在您的音频完成后,执行 .setActive(false)
  • 然后恢复 UI 更改

这似乎减少了您的应用程序被“卡住”的感觉,因为您的用户是通过听觉而非视觉方式“接收指令”,正如文档似乎暗示的那样。

.DuckOthers

Use this option if you want audio from your app (for example, voice prompts in a navigation app) to be heard over music or other currently playing audio. Note that ducking begins when you activate your app’s audio session and ends when you deactivate the session.

If your app provides occasional spoken audio, such as in a turn-by-turn navigation app or an exercise app, you should also use the AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers option.

关于ios - 有没有什么方法可以在不中断 UI 的情况下实现 avaudiosession .duckothers。 swift 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589326/

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