Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone AVAudioSession未按Apple所述工作_Iphone_Objective C_Core Audio_Avaudioplayer_Avaudiosession - Fatal编程技术网

Iphone AVAudioSession未按Apple所述工作

Iphone AVAudioSession未按Apple所述工作,iphone,objective-c,core-audio,avaudioplayer,avaudiosession,Iphone,Objective C,Core Audio,Avaudioplayer,Avaudiosession,我的游戏有3首背景歌曲。我希望游戏在播放ipod音乐时将背景音乐设置为关闭,否则它将播放最后播放的音乐。当muser在ipod music打开的情况下更改音乐时,ipod音乐应消失,并播放背景音乐。问题是,当我第二次尝试这样做(将音乐从ipod更改为游戏中的音乐)时,第一首歌会播放,但其他两首歌不会 这是愚蠢的行为,我解决问题的任何方法都行不通。这是我当前的代码 在drawRect循环中: //Music toggle if(music_activ

我的游戏有3首背景歌曲。我希望游戏在播放ipod音乐时将背景音乐设置为关闭,否则它将播放最后播放的音乐。当muser在ipod music打开的情况下更改音乐时,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;
        }
[background_music stop];
        [background_musicB stop];
        [background_musicC stop];
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:NULL];
        [ [AVAudioSession sharedInstance] setActive:NO error:NULL];
在stopAnimation方法中:

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;
        }
[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


谢谢您的帮助。

您能澄清一下“我第二次尝试这样做(将音乐从ipod更改为游戏中)时,第一首歌会播放,但其他两首歌不会”是什么意思吗?第二次运行应用程序时?您是否开始播放iPod音乐,切换背景音乐(成功),然后在不离开应用程序的情况下再次播放iPod,然后再次尝试切换背景音乐?您好。谢谢你的评论。对不起,我说得不够清楚。我的意思是第二次执行应用程序。我加载游戏,然后播放iPod音乐。然后,我成功地将音乐更改为游戏中的音乐,更改为我想要的任何音乐。当我再次切换到iPod音乐,然后第二次尝试切换回iPod音乐时,第二首和第三首歌曲无法播放。因此,基本上,正在调用startAnimation,结果将为false,因为我最初不会播放任何内容。然后调用stopAnimation,然后再次调用startAnimation,结果为true。然后,我切换drawRect方法中通过代码运行的音乐。它起作用了。再次调用stopAnimation,然后再调用startAnimation,第二次调用结果为true。切换音乐失败。我想我可能需要处理一段时间,我的客户也必须处理这个问题。这不是一个大错误,很可能是苹果的错。在接下来的几天里,我想在我的申请获得批准后发布一个更新,但是如果我不能修复它,那就这样吧。