ios - 如何使 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 的任何建议。
伊恩
解决方案
我已经弄清楚了,正如马特所指出的,我做错了什么!我不能在这里发布我的代码,因为它非常大。基本上,我已经编写了处理所有音频文件的音频类,声明了引擎 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 中。至少对我有用的要点是将这些东西与实际管理音频的类分开。
所以,谢谢马特。
伊恩
推荐阅读
- php - 压缩手动关闭的连接并继续处理
- java - 程序给了我一个“线程“主”java.util.InputMismatchException中的异常”
- ember.js - EmberJS 测试:从每个循环创建的目标 id
- python - 有人可以向我解释我在这里做错了什么吗?它是工作表的一部分,不是特别清楚
- reactjs - React + Redux + Firebase:如何处理定义并导出为类的 firebase 配置?
- java - 如何比较两个项目集列表并计算子集出现次数?
- rancher - Rancher:容器Rancher/Rancher满载内存
- c# - 通过 c# 与 ssh-keygen 交互
- r - 从 R 中的包 emmeans 中提取函数输出的一部分
- python - Discord.py - 命令没有注册我的所有参数