Уверен, но будет выделена и подготовлена игра для задержки, так как выделено и подготовлено 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
.
Возможно, это не лучший способ сделать что-то, но это может сработать, если вы так потребуете.