Я пытаюсь получить согласованное поведение из свойства kAudioSessionProperty_OtherMixableAudioShouldDuck на iPhone, чтобы разрешить смешивание музыки на iPod, и у меня возникают проблемы. В начале моего приложения я установил категорию Ambient примерно так:
-(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];
Затем я снова вызываю метод crossfade, пропуская ноль, когда аудио моего приложения завершает использование воспроизведения, останавливая обратный вызов следующим образом:
-(void) playbackIsStoppingForPlayer:(MQAudioPlayer*)audioPlayer
{
NSLog(@"Releasing player");
[audioPlayer release];
[self toggleCrossfadeOn:0];
}
В моем производственном приложении этот точный код работает должным образом, заставляя ipod затухать непосредственно перед воспроизведением звука моего приложения, а затем возвращаться обратно, когда воспроизведение заканчивается. В новом проекте, который я недавно начал, у меня другое поведение. Аудио iPod исчезает и никогда не возвращается обратно. В моем производственном приложении я использую AVAudioPlayer, где в моем новом приложении я написал собственный аудиоплеер, который использует аудио-очереди. Может ли кто-нибудь помочь мне понять различия и как правильно использовать этот API?