【发布时间】:2010-12-12 22:57:58
【问题描述】:
所以我刚刚注意到,在我的 iPod Touch 上,当我的应用触发一个短的 wav 文件以使用 AVAudioPlayer 播放时,音乐会暂停。这是正常的吗?
我找不到对此的任何参考,而且似乎会在某处注明。有没有办法在我播放声音时让音乐继续播放?
【问题讨论】:
-
肯尼请更改您接受的答案。 0:)
标签: iphone audio avaudioplayer
所以我刚刚注意到,在我的 iPod Touch 上,当我的应用触发一个短的 wav 文件以使用 AVAudioPlayer 播放时,音乐会暂停。这是正常的吗?
我找不到对此的任何参考,而且似乎会在某处注明。有没有办法在我播放声音时让音乐继续播放?
【问题讨论】:
标签: iphone audio avaudioplayer
基本上,每个应用程序都分配有一个音频会话,该会话被建模为一个单例类,您可以在应用程序启动时获取它并为其设置参数。我解决同样问题的方法是通过放在applicationDidFinishLaunching 的一行代码:
目标-C:
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:nil];
斯威夫特 2/3:
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
【讨论】:
注意:The AudioSession API has been completely deprecated in iOS 7.0
如果不做更多工作,您不能同时运行 AVAudioPlayer 和 iPod 播放器或 MPMusicPlayer 或 MPMoviePlayer。如果您想要简单,请使用 Audio Toolbox 的系统声音。
如果你想做一些额外的工作,那么你应该看看Audio Sessions:
kAudioSessionCategory_UserInterfaceSoundEffects用于触摸等音效 反馈、爆炸等等。相当于
kAudioSessionCategory_AmbientSound类别,您应该使用 反而。这kAudioSessionCategory_UserInterfaceSoundEffects类别在 iPhone OS 中已弃用 3.0.
kAudioSessionCategory_AmbientSound为 长时间的声音,如雨声、汽车声 发动机噪音等等。也是 对于“一起玩”风格的应用程序, 用户弹奏的虚拟钢琴 通过 iPod 音频。当您使用此类别时,来自 内置应用程序,例如 iPod,与您的音频混合。您的 响铃/静音时音频静音 开关设置为静音或当 屏幕锁定。
【讨论】:
根据您的要求,播放系统声音可能还不够,请查看会话选项,例如与其他人混合
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)
【讨论】: