如何在AVAudioplayer中播放多个文件

时间:2013-03-28 09:10:04

标签: iphone xcode audio avaudioplayer

我在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;
 }

1 个答案:

答案 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