Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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 背景模式下的音频切换AVFoundation-objective-c_Iphone_Objective C_Ios_Ios4_Avfoundation - Fatal编程技术网

Iphone 背景模式下的音频切换AVFoundation-objective-c

Iphone 背景模式下的音频切换AVFoundation-objective-c,iphone,objective-c,ios,ios4,avfoundation,Iphone,Objective C,Ios,Ios4,Avfoundation,我有一个名为LocalAudio的音频对象数组。对于播放音频,我使用AVAudioPlayer。我已经实现了委托方法:audioplayerdfinishplaying:,在这里我将代码放在本地音频阵列中切换下一个声音 -(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { [self switchTrack:nextAudioIndex]; } 音频在后台播放,但

我有一个名为LocalAudio的音频对象数组。对于播放音频,我使用
AVAudioPlayer
。我已经实现了委托方法:
audioplayerdfinishplaying:
,在这里我将代码放在本地音频阵列中切换下一个声音

 -(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
 {
    [self switchTrack:nextAudioIndex];
 }
音频在后台播放,但声音不切换。那么如何在后台模式下切换音频呢?
对于调试,我使用iPad2。

我使用相同的逻辑,并且它正在工作,所以其他一些东西肯定是不正确的

编辑: 范例

-(无效)AudioPlayerDifinishPlaying:(AVAudioPlayer*)玩家成功:(BOOL)标志 { 如果(标志==否) NSLog(@“播放未成功完成”); [播放器设置当前时间:0.0]; [背景音乐层发布]; 背景音乐层=零; 如果(![music isEqualToString:@“10”]){ [自动播放音乐,其键:[NSString stringWithFormat:@“%i”,([music intValue]+1)]时间存储重复:0]; } } 在哪里

-(void)使用键:(NSString*)播放音乐时间存储重复:(nsInteger)时间存储重复{ n错误*错误; NSString*path=[musicLibrary对象forkey:theMusicKey]; //初始化AVAudioPlayer 如果(背景音乐层==nil){ BackgroundMusicLayer=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path]错误:&error]; [背景音乐Layer setDelegate:self]; [BackgroundMusicLayer设置音量:backgroundMusicVolume]; musicLenght=背景MusicLayer.duration; } //如果BackgroundMusicLayer对象为nil,则存在错误 如果(!BackgroundMusicLayer){ NSLog(@“错误声音管理器:无法播放音乐键“@”,音乐键); 返回; } //设置此音乐应重复的次数。-1表示永不停止,直到要求停止为止 [背景音乐层设置循环数:TimeStore重复]; //演奏音乐 [背景音乐播放准备播放]; [背景音乐播放]; }
谢谢你,瓦尼亚。我还为使用AVPlayer的用户找到了很好的解决方案。完美作品:

是的,即使是在后台也被锁定了。 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { if (flag == NO) NSLog(@"Playback finished unsuccessfully"); [player setCurrentTime:0.0]; [backgroundMusicPlayer release]; backgroundMusicPlayer = nil; if (![music isEqualToString:@"10"]) { [self playMusicWithKey:[NSString stringWithFormat:@"%i", ([music intValue] + 1)] timesToRepeat:0]; } } - (void) playMusicWithKey:(NSString*)theMusicKey timesToRepeat:(NSUInteger)theTimesToRepeat { NSError *error; NSString *path = [musicLibrary objectForKey:theMusicKey]; // Initialize the AVAudioPlayer if (backgroundMusicPlayer == nil) { backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error]; [backgroundMusicPlayer setDelegate: self]; [backgroundMusicPlayer setVolume:backgroundMusicVolume]; musicLenght = backgroundMusicPlayer.duration; } // If the backgroundMusicPlayer object is nil then there was an error if(!backgroundMusicPlayer) { NSLog(@"ERROR SoundManager: Could not play music for key '%@'", theMusicKey); return; } // Set the number of times this music should repeat. -1 means never stop until its asked to stop [backgroundMusicPlayer setNumberOfLoops:theTimesToRepeat]; // Play the music [backgroundMusicPlayer prepareToPlay]; [backgroundMusicPlayer play]; }