J'essaie d'éliminer le décalage au démarrage lors de la lecture d'un fichier audio (très court - moins de 2 secondes) via AVAudioPlayer sur l'iPhone.
D'abord, le code :
NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"];
NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile];
NSError *err;
AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err];
audioPlayer.delegate = self;
[audioPlayer play];
J'implémente également la méthode audioPlayerDidFinishPlaying pour libérer l'AVAudioPlayer une fois que j'ai terminé.
La première fois que je joue l'audio, le décalage est palpable -- au moins 2 secondes. Cependant, après cela, le son est lu immédiatement. Je soupçonne que le coupable est le [NSData dataWithContentsOfMappedFile] qui prend beaucoup de temps à lire le flash au départ, mais qui est rapide lors des lectures suivantes. Je ne suis pas sûr de savoir comment tester cela, cependant.
Est-ce le cas ? Si c'est le cas, dois-je simplement pré-cacher les objets NSData et les vider en cas de manque de mémoire ?
Mise à jour :
Le délai semble être lié à l'instanciation de l'AVAudioPlayer pour la première fois. Si je charge un fichier audio, que j'exécute [audioPlayer prepareToPlay] et que je le relâche immédiatement, le temps de chargement de tous mes autres fichiers audio est pratiquement imperceptible. Je fais donc maintenant cela dans l'applicationDidFinishLaunching et tout le reste fonctionne bien.
Je n'ai rien trouvé à ce sujet dans la documentation, mais cela semble être le cas.