Bien sûr, mais il y aura un délai car le AVAudioPlayer
est alloué et prêt à jouer. Pouvez-vous prédire ce qui va jouer et quand? Si oui, peut-être vous pouvez charger quelques secondes avant d'avoir besoin d'un mp3 particulier à jouer.
Une alternative qui ne peut pas fonctionner en fonction de vos besoins de synchronisation, est la suivante:
- (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];
}
}
Cette solution nécessite des propriétés de FileNames
et AudioPlayers
.
Une fois configuré, vous pouvez faire quelque chose comme ce qui suit (probablement viewDidLoad
):
// Make the file name array
[self setFileNames:[NSMutableArray array]];
// Initiate the audio player loading
[self performSelectorInBackground:@selector(prepareAudioPlayer) withObject:nil];
Plus tard, quand vous avez besoin de lire un fichier particulier, vous pouvez trouver l'index du nom de fichier dans le tableau FileNames
et l'appel play
sur le AVAudioPlayer
pour cet index dans le tableau AudioPlayers
.
Cela ne semble peut-être pas la meilleure façon de faire les choses, mais cela pourrait fonctionner si vous le souhaitez.