所以我刚注意到在我的iPod Touch上,当我的应用程序触发使用AVAudioPlayer播放的短wav文件时,音乐会暂停。这是正常的吗?
我找不到任何对此的引用,似乎会在某处注意到。有没有办法让我在播放声音的同时保持音乐效果?
答案 0 :(得分:70)
基本上,为每个应用程序分配一个音频会话,该会话被建模为单例类,您可以在应用程序启动时获取并将参数设置为。我解决同一问题的方法是通过放在applicationDidFinishLaunching
的一行代码:
<强>目标-C:强>
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:nil];
Swift 2/3:
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
答案 1 :(得分:13)
注意:The AudioSession API has been completely deprecated in iOS 7.0
您无法同时运行AVAudioPlayer和iPod播放器或MPMusicPlayer或MPMoviePlayer,无需多做多少工作。如果您想要简单,请使用Audio Toolbox的System Sounds。
如果你想做一些额外的工作,那么你应该看看Audio Sessions:
kAudioSessionCategory_UserInterfaceSoundEffects
用于触摸等声音效果 反馈,爆炸等等。相当于
kAudioSessionCategory_AmbientSound
类别,你应该使用 代替。该kAudioSessionCategory_UserInterfaceSoundEffects
类别在iPhone OS中已弃用 3.0。
kAudioSessionCategory_AmbientSound
长时间的声音,如下雨,汽车 发动机噪音,等等。也是 用于“播放”风格的应用程序, 用户演奏的这种虚拟钢琴 超过iPod音频。当您使用此类别时,音频来自 内置应用程序,如 iPod,与您的音频混合。您的 响铃/静音时音频被静音 开关设置为静音或何时 屏幕锁。
答案 2 :(得分:0)
根据您的要求,播放系统声音可能还不够,请查看会话选项,例如: 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音量)是另一种选择。