所以我刚刚注意到,在我的 iPod Touch 上,当我的应用程序触发一个短的 wav 文件以使用 AVAudioPlayer 播放时,音乐会暂停。这是正常的吗?
我找不到对此的任何参考,而且似乎会在某处注明。有没有办法在我播放声音时让音乐继续播放?
所以我刚刚注意到,在我的 iPod Touch 上,当我的应用程序触发一个短的 wav 文件以使用 AVAudioPlayer 播放时,音乐会暂停。这是正常的吗?
我找不到对此的任何参考,而且似乎会在某处注明。有没有办法在我播放声音时让音乐继续播放?
基本上,每个应用程序都分配有一个音频会话,该会话被建模为一个单例类,您可以在应用程序启动时获取它并设置参数。我解决相同问题的方法是通过放置在以下位置的一行代码applicationDidFinishLaunching
:
目标-C:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
斯威夫特 2/3:
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
您不能同时运行 AVAudioPlayer 和 iPod 播放器或 MPMusicPlayer 或 MPMoviePlayer,而不做更多的工作。如果您想要简单,请使用 Audio Toolbox 的系统声音。
如果你想做一些额外的工作,那么你应该看看Audio Sessions:
kAudioSessionCategory_UserInterfaceSoundEffects
用于触摸反馈、爆炸等音效。等效于
kAudioSessionCategory_AmbientSound
您应该使用的类别。该kAudioSessionCategory_UserInterfaceSoundEffects
类别在 iPhone OS 3.0 中已弃用。
kAudioSessionCategory_AmbientSound
适用于长时间的声音,例如雨声、汽车发动机噪音等。它也适用于“随玩”风格的应用程序,例如用户通过 iPod 音频播放的虚拟钢琴。当您使用此类别时,来自内置应用程序(如 iPod)的音频会与您的音频混合。当响铃/静音开关设置为静音或屏幕锁定时,您的音频会静音。
根据您的要求,播放系统声音可能还不够,请查看会话选项,例如 MixWithOthers
struct AVAudioSessionCategoryOptions : OptionSetType {
init(rawValue rawValue: UInt)
static var MixWithOthers: AVAudioSessionCategoryOptions { get }
static var DuckOthers: AVAudioSessionCategoryOptions { get }
static var AllowBluetooth: AVAudioSessionCategoryOptions { get }
static var DefaultToSpeaker: AVAudioSessionCategoryOptions { get }
static var InterruptSpokenAudioAndMixWithOthers: AVAudioSessionCategoryOptions { get }
}
当你开始你的会话时,传递MixWithOthers
选项,也许DuckOthers
(当你的声音播放时会降低 ipod 音量)是另一个选项。
Swift 5 等价物:
try? AVAudioSession.sharedInstance().setCategory(.ambient)