小编mas*_*asi的帖子

如何使用kAudioSessionProperty_OverrideCategoryMixWithOthers

当应用程序在后台时,我想让我的虚拟乐器应用程序能够被使用(通过MIDI键盘).通过将UIBackgroundModes设置为"audio"并将AudioSessions的类别设置为AVAudioSessionCategoryPlayback,可以正常工作.此外,为了允许与音乐播放器应用程序混合,我设置属性kAudioSessionProperty_OverrideCategoryMixWithOthers.

为节省电池电量,建议用户在不需要时关闭后台操作.所以我的应用程序中有一个开关可以在类别AVAudioSessionCategoryAmbient和类别AVAudioSessionCategoryPlayback(使用kAudioSessionProperty_OverrideCategoryMixWithOthers)之间切换.代码是这样的(省略错误处理):

NSString *category = supportsBackgroundOperation ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryAmbient;

[session setCategory:category error:nil];

if (category == AVAudioSessionCategoryPlayback) {
    UInt32 allowMixing = true;
    AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
}
Run Code Online (Sandbox Code Playgroud)

现在问题是:假设音乐应用程序正在后台播放.用户正在前台(通过MIDI键盘)播放虚拟乐器以伴随音乐播放器并决定启动另一个应用程序,例如幻灯片放映以享受播放乐器的原因.所以他/她进入我的应用程序的设置视图并激活后台操作.然后执行上面的代码.Boom,音乐应用程序变得沉默.据我了解,kAudioSessionProperty_OverrideCategoryMixWithOthers属性只能设置类别设置,但是当我将类别设置为AVAudioSessionCategoryPlayback时,系统会在我有机会设置kAudioSessionProperty_OverrideCategoryMixWithOthers之前使音乐播放器静音.

这是发生了吗?有什么可以做的吗?我尝试在更改类别之前/之后停用/激活会话,但这会导致其他问题.

马库斯

audio ios

7
推荐指数
2
解决办法
9820
查看次数

标签 统计

audio ×1

ios ×1