Iphone 背景模式下的音频切换AVFoundation-objective-c
我有一个名为LocalAudio的音频对象数组。对于播放音频,我使用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]; } 音频在后台播放,但
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]; }