Je suis en train d'éliminer le décalage de démarrage lors de la lecture d'un (très court - moins de 2 secondes) fichier audio via AVAudioPlayer sur l'iPhone.Démarrage lent pour AVAudioPlayer la première fois un son est joué
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];
je mets en œuvre aussi la méthode de audioPlayerDidFinishPlaying pour libérer le AVAudioPlayer une fois que je suis fait.
La première fois que je joue l'audio le retard est palpable - au moins 2 secondes. Cependant, après que le son joue immédiatement. Je soupçonne que le coupable, alors, est le [NSData dataWithContentsOfMappedFile] prenant beaucoup de temps à lire à partir du flash, mais ensuite être rapide sur les lectures ultérieures. Je ne suis pas sûr de savoir comment tester cela, cependant.
Est-ce le cas? Si oui, dois-je simplement pré-mettre en cache les objets NSData et être agressif pour les effacer dans des conditions de mémoire insuffisante?
Merci pour l'info. Vous devriez répondre à la question et accepter votre réponse. L'initialisation de l'AVAudioPlayer au démarrage a permis de lire l'audio sans délai dans le reste de l'application. – brianegge
@johnbiesnecker joue n'importe quel son avec 0 volume, alors tous les appels sonores doivent être dans un bloc de file d'attente global asynchrone, avec une priorité par défaut ou haute, le son ne doit pas être joué dans la file d'attente principale. –
En plus de ce que dit @JuanPabloBoero, j'ai aussi joué le son de volume 0 lors de la réception de 'UIApplicationWillEnterForegroundNotification', sinon il y a un délai après la reprise de l'application de l'arrière-plan. – Pang