AVAudioSession不像Apple描述的那样工作

时间:2010-10-20 22:19:15

标签: iphone objective-c core-audio avaudioplayer avaudiosession

我的游戏有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。

感谢您的帮助。

0 个答案:

没有答案