Sto cercando di eliminare il ritardo di avvio durante la riproduzione di un file audio (molto breve - meno di 2 secondi) tramite AVAudioPlayer sull'iPhone.Avvio lento per AVAudioPlayer la prima volta che viene riprodotto un suono
In primo luogo, il codice:
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];
Ho anche implementare il metodo audioPlayerDidFinishPlaying per rilasciare l'AVAudioPlayer volta che ho fatto.
La prima volta che suono l'audio, il ritardo è palpabile - almeno 2 secondi. Tuttavia, dopo che il suono viene riprodotto immediatamente. Ho il sospetto che il colpevole, quindi, sia il [NSData dataWithContentsOfMappedFile] che impiega molto tempo a leggere dal flash inizialmente, ma poi a essere veloce nelle letture successive. Non sono sicuro di come testarlo, comunque.
È il caso? In tal caso, dovrei solo pre-memorizzare nella cache gli oggetti NSData ed essere aggressivo per eliminarli in condizioni di scarsa memoria?
Grazie per le informazioni. Dovresti rispondere alla domanda e accettare la tua risposta. L'inizializzazione di AVAudioPlayer all'avvio ha assicurato l'audio riprodotto senza ritardo nel resto dell'app. – brianegge
@johnbiesnecker riproduce qualsiasi suono con volume 0, quindi tutte le chiamate di riproduzione audio devono trovarsi all'interno di un blocco di code globali asincrone, con una priorità predefinita o alta, il suono non deve essere riprodotto nella coda principale. –
In aggiunta a ciò che @JuanPabloBoero ha detto, ho anche riprodotto il suono del volume 0 durante la ricezione di 'UIApplicationWillEnterForegroundNotification', altrimenti c'è un ritardo dopo che l'app è stata ripresa dallo sfondo. – Pang