我正在构建一个路线导航应用程序,可以播放周期性的简短声音片段。无论屏幕是否锁定,声音都应该播放,应该与其他音乐播放混合,并且应该在播放此音频时使其他音乐闪避。
Apple 在 29:20 分钟的“WWDC 2010 session 412 iPhone OS 音频开发第 1 部分”视频中详细讨论了逐步使用案例。该实现效果很好,但有一个问题 - 当应用程序运行时,按硬件音量控件可以调整铃声音量,而不是应用程序音量。如果您想更改应用程序音量,则必须在播放提示时按音量按钮。
Apple 在视频中非常明确地指出,您不应将 AVAudioSession 保持活动状态,但如果 AVAudioSession 处于非活动状态,则音量按钮将无法控制我的应用程序的音量。
这是我用来设置的代码:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
UInt32 shouldDuck = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(shouldDuck), &shouldDuck);
OSStatus activationResult = AudioSessionSetActive(true);
NSError* err = nil;
_player = [[AVAudioPlayer alloc] initWithData:audioData error:&err];
_player.delegate = self;
[_player play];
最后,我将会话活动设置为“否”,正如苹果建议的那样:
OSStatus activationResult = AudioSessionSetActive(false);
NSAssert(activationResult == kAudioSessionNoError, @"Error deactivating audio session");
我是否遗漏了什么,或者我是否必须违背他们在视频中推荐的内容?