我在plist中有一些歌曲,想要使用AVAudioplayer一个接一个地播放它们。 但是当第一首歌结束时它停止了。如何在下一首歌中启动播放器? 我已经尝试了一个循环,它计入plist中的下一个数字,但它不起作用。玩家在第一轮后停止。这应该很简单,但如何? 这是我的代码的一部分。是否可以像我一样使用循环?
NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist"
ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];
for (int n = 1; n<=5;n++) {
NSString *filename = [soundsList objectAtIndex:n]; //n is number in plist, counting upwards in a for...loop
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"au"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path];
sound = [[AVAudioPlayer alloc] initWithContentsOfURL : fileURL error:nil];
sound.delegate = self;
}
答案 0 :(得分:1)
尝试这样它会帮助你,
-(void)viewDidLoad{
NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist"
ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];
[self AddSongToAvplayer];
}
-(void)AddSongToAvplayer{
NSString *filename = [soundsList objectAtIndex:n]; //n is number in plist, counting upwards in a for...loop
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"au"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path];
sound = [[AVAudioPlayer alloc] initWithContentsOfURL : fileURL error:nil];
sound.delegate = self;
n++;
if(n<=[sound count])
[NSTimer scheduledTimerWithTimeInterval:sound.duration target:self selector:@selector(AddSongToAvplayer) userInfo:nil repeats:NO];
}
上面代码sound.duration
中的给出了该特定歌曲的timeInterval,并根据该歌曲的完成后你可以通过使用定时器调用该方法。如果最后一首歌曲出现,则停止{{1} }。
编辑:
NSTimer