AVAudioPlayer
当然可以,但是在分配并准备播放时会有延迟。你能预测什么时候会播放什么吗?如果是这样,也许您可以在需要播放特定 mp3 之前加载几秒钟。
根据您的时序要求,可能无法正常工作的替代方法如下:
- (void)prepareAudioPlayer {
static int index = -1;
index = index + 1;
if (index < [[self FileNames] count]) {
NSError *err = nil;
NSString *audioFilePath = @""; // Figure out how to get each file name here
NSURL *audioFileURL = [NSURL fileURLWithPath:audioFilePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:&err];
if (err) {
NSLog(@"Audio Player Error: %@", [err description]);
}
[player prepareToPlay];
// Add this player to the "AudioPlayers" array
[[self AudioPlayers] addObject:player];
// Recurse until all players are loaded
[self prepareAudioPlayer];
}
}
FileNames
此解决方案需要和的属性AudioPlayers
。
设置完成后,您可以执行以下操作(可能在 中viewDidLoad
):
// Make the file name array
[self setFileNames:[NSMutableArray array]];
// Initiate the audio player loading
[self performSelectorInBackground:@selector(prepareAudioPlayer) withObject:nil];
稍后,当您需要播放特定文件时,您可以在数组中找到文件名的索引,并在数组中对该索引进行FileNames
调用。play
AVAudioPlayer
AudioPlayers
这似乎不是最好的做事方式,但如果您需要这种方式,它可能会起作用。