我是一名正在进行编码练习的学生,我很难过!
我的应用程序中有两个AVAudioPlayer实例 - 我可以使用直接路径将歌曲加载到每个播放器中没问题。
我希望能够在每个播放器上播放阵列中的多首歌曲。
这可能吗?如果是这样,我该怎么做呢?
在我的plist中,我将键设置为“One.mp3”作为字符串,将值设置为文件的路径...(正在猜测该部分)。
感谢您的任何见解。
- (void)viewDidLoad {
[super viewDidLoad];
//multiple song array
NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist"
ofType:@"plist"];
soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];
NSString* filename = [soundsList objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:filename
ofType:@"mp3"];
AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]
error:NULL];
self.audioPlayer = newAudio; // automatically retain audio and dealloc old file if new file is loaded
[newAudio release]; // release the audio safely
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
[audioPlayer setNumberOfLoops:0];
[audioPlayer play];
}
答案 0 :(得分:1)
听起来你想尝试在一个播放器上播放多首歌曲。这不可能如AVAudioPlayer Overview(第4章)中所述。可以使用多个AVAudioPlayers播放多首歌曲。像这样:
NSMutableArray *audioPlayers = [NSMutableArray arrayWithCapacity:[soundsList count]];
for (NSString *soundPath in soundsList) {
NSError *error = nil;
AVAudioPlayer *audioPlayer = [AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
[audioPlayers addObject:audioPlayer];
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
[audioPlayer setNumberOfLoops:0];
[audioPlayer play];
}
我建议您对文件路径进行硬编码,而不是使用plist读取它。一旦你开始工作,你就可以尝试用plist读取它。像这样的东西会起作用:
NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"One" withExtension:@"mp3"];
AVAudioPlayer *soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error]
这样,您可以删除一个级别的间接和一个故障点。