18

所以我刚刚注意到,在我的 iPod Touch 上,当我的应用程序触发一个短的 wav 文件以使用 AVAudioPlayer 播放时,音乐会暂停。这是正常的吗?

我找不到对此的任何参考,而且似乎会在某处注明。有没有办法在我播放声音时让音乐继续播放?

4

4 回答 4

81

基本上,每个应用程序都分配有一个音频会话,该会话被建模为一个单例类,您可以在应用程序启动时获取它并设置参数。我解决相同问题的方法是通过放置在以下位置的一行代码applicationDidFinishLaunching

目标-C:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

斯威夫特 2/3:

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
于 2011-09-14T08:11:29.760 回答
13

注意iOS 7.0 中已完全弃用 AudioSession API

您不能同时运行 AVAudioPlayer 和 iPod 播放器或 MPMusicPlayer 或 MPMoviePlayer,而不做更多的工作。如果您想要简单,请使用 Audio Toolbox 的系统声音。

如果你想做一些额外的工作,那么你应该看看Audio Sessions

kAudioSessionCategory_UserInterfaceSoundEffects 用于触摸反馈、爆炸等音效。

等效于 kAudioSessionCategory_AmbientSound 您应该使用的类别。该 kAudioSessionCategory_UserInterfaceSoundEffects 类别在 iPhone OS 3.0 中已弃用。

kAudioSessionCategory_AmbientSound适用于长时间的声音,例如雨声、汽车发动机噪音等。它也适用于“随玩”风格的应用程序,例如用户通过 iPod 音频播放的虚拟钢琴。

当您使用此类别时,来自内置应用程序(如 iPod)的音频会与您的音频混合。当响铃/静音开关设置为静音或屏幕锁定时,您的音频会静音。

于 2009-11-04T10:00:09.943 回答
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 音量)是另一个选项。

于 2016-01-28T17:19:58.913 回答
0

Swift 5 等价物:

try? AVAudioSession.sharedInstance().setCategory(.ambient)
于 2021-11-05T08:58:12.667 回答