AVAudioSession не работает, как описано Apple - PullRequest
3 голосов
/ 21 октября 2010

В моей игре 3 фоновые песни. Я хотел бы, чтобы игра отключала фоновую музыку, когда играет музыка ipod, иначе она будет воспроизводить последний проигранный фрагмент музыки. Когда muser меняет музыку при включенной музыке ipod, музыка ipod должна исчезнуть, а фоновая музыка играет. Проблема в том, что во второй раз Я пытаюсь это сделать (переключая музыку с iPod на игровую), первая песня будет воспроизводиться, а две другие - нет.

Это глупое поведение, и оно не будет работать так, как я пытаюсь решить проблему. Вот мой текущий код ....

В цикле drawRect:

//Music toggle
                        if(music_active == 0){
                            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];
                            [[AVAudioSession sharedInstance] setActive:YES error:NULL];
                            [background_music play];
                            music_active++;
                        }else if(music_active == 1){
                            [background_music pause];
                            [background_musicB play];
                            music_active++;
                        }else if(music_active == 2){
                            [background_musicB pause];
                            [background_musicC play];
                            music_active++;
                        }else{
                            [background_musicC pause];
                            music_active = 0;
                        }

В методе startAnimation:

UInt32 size,result;
        size = sizeof(result);
        AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying,&size,&result);
        if(!result){
            [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];
            [[AVAudioSession sharedInstance]  setActive:YES error:NULL];
            [background_music prepareToPlay];
            [background_musicB prepareToPlay];
            [background_musicC prepareToPlay];
            if(music_active == 1){
                [background_music play];
            }else if(music_active == 2){
                [background_musicB play];
            }else if(music_active == 3){
                [background_musicC play];
            }
        }else{
            music_active = 0;
        }

В методе stopAnimation:

[background_music stop];
        [background_musicB stop];
        [background_musicC stop];
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:NULL];
        [ [AVAudioSession sharedInstance] setActive:NO error:NULL];

В методе initWithCoder:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:NULL];

Этот метод также загружает звуковые файлы и устанавливает количество циклов в -1. Конечно, он использует AVAudioPlayer.

Спасибо за любую помощь.

...