首页 > 解决方案 > 如何使 AVAudioSession 在静音模式下工作并使用 .mixWithOthers

问题描述

我正在使用 AVAudioEngine 在 Swift (Xcode 11.5) 中编写一个 iOS 应用程序

一切正常,但是当 iPhone/iPad 关闭静音按钮时,我无法让它与其他音频应用程序一起播放。

有了这个:

try AVAudioSession.sharedInstance().setCategory(.playback)

我的音频可以在静音按钮打开或关闭的情况下使用,但如果我正在播放 Apple Music 中的某些内容,当我点击音频播放时,Apple Music 会暂停。

有了这个:

try AVAudioSession.sharedInstance().setCategory(.ambient, options: .mixWithOthers)

我的音频适用于 Apple Music,但如果静音按钮关闭,则无法播放。

有了这个:

try AVAudioSession.sharedInstance().setCategory(.playback, options: [.mixWithOthers])

拥有 .mixWithOthers 没有任何区别。

我确信有一个选项组合可以使它在打开或关闭静音按钮时工作,并且不会停止其他音频播放,但我找不到它!

TIA 的任何建议。

伊恩

标签: iosswiftxcodeavaudioengineavaudiosessioncategory

解决方案


我已经弄清楚了,正如马特所指出的,我做错了什么!我不能在这里发布我的代码,因为它非常大。基本上,我已经编写了处理所有音频文件的音频类,声明了引擎 AVAudioEngine(); 节点,AVAudioPlayerNode(); 并做所有的演奏等等。

我的错误是把这种东西放在那个班级里,显然是放错了地方:

do {
  let audioSession = AVAudioSession.sharedInstance()
  try audioSession.setActive(false)
  if resetOptions.muteOtherApps {
    try audioSession.setCategory(.playback, options: [])
  } else {
    try audioSession.setCategory(.playback, options: [.mixWithOthers])
  }
} catch {
  print("Audio error")
}

因为我让用户在这些选项之间进行选择,所以将它放在我的主 ViewController 类中对我来说很方便。但是,如果它为应用程序设置了固定,从我读过的一个好地方来看,它是在 didFinishLaunchingWithOptions 函数中的 AppDelegate.Swift 中。至少对我有用的要点是将这些东西与实际管理音频的类分开。

所以,谢谢马特。

伊恩


推荐阅读