我正在尝试在iPhone上获取kAudioSessionProperty_OtherMixableAudioShouldDuck属性的一致行为,以允许iPod音乐混合,但我遇到了麻烦。在我的应用程序开始时,我设置了一个环境类别,如下所示:
-(void) initialize
{
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];
}
之后,当我尝试播放音频时,我使用以下方法设置鸭子属性:
//this will crossfade the audio with the ipod music
- (void) toggleCrossfadeOn:(UInt32)onOff
{
//crossfade the ipod music
AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck,sizeof(onOff),&onOff);
AudioSessionSetActive(onOff);
}
我称这个过程为在播放音频之前传递数字“1”,如下所示:
[self toggleCrossfadeOn:1];
[player play];
然后,我再次调用淡入淡出方法,使用播放停止回调函数,在我的应用音频完成时传递零,如下所示:
-(void) playbackIsStoppingForPlayer:(MQAudioPlayer*)audioPlayer
{
NSLog(@"Releasing player");
[audioPlayer release];
[self toggleCrossfadeOn:0];
}
在我的生产应用中,这段代码按预期工作,使iPod在播放我的应用音频之前淡出,然后在音频播放完毕后淡入。但在我最近开始的新项目中,它表现不同。iPod音频淡出后永远不会淡入。在我的生产应用中,我使用AVAudioPlayer,在我的新应用中,我编写了一个使用音频队列的自定义音频播放器。有人能帮助我理解差异并正确使用此API吗?