Estoy tratando de eliminar el retraso de inicio cuando se reproduce un archivo de audio (muy corto - menos de 2 segundos) a través de AVAudioPlayer en el iPhone.Inicio lento para AVAudioPlayer la primera vez que se reproduce un sonido
En primer lugar, el código:
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];
también poner en práctica el método audioPlayerDidFinishPlaying para liberar el AVAudioPlayer una vez que he terminado.
La primera vez que reproduzco el audio, el desfase es palpable: al menos 2 segundos. Sin embargo, después de eso, el sonido se reproduce inmediatamente. Sospecho que el culpable, entonces, es el [NSData dataWithContentsOfMappedFile] que lleva mucho tiempo leyendo desde el flash inicialmente, pero luego lo lee rápidamente. Aunque no estoy seguro de cómo probar eso.
¿Es ese el caso? Si es así, ¿debería precachear los objetos NSData y ser agresivo sobre borrarlos en condiciones de poca memoria?
Gracias por la información. Debe responder la pregunta y aceptar su respuesta. La inicialización de AVAudioPlayer al inicio aseguró que el audio se reproducía sin demora en el resto de la aplicación. – brianegge
@johnbiesnecker reproduce cualquier sonido con 0 volumen, luego todas las llamadas de reproducción de sonido deben estar dentro de un bloque de cola global asíncrono, con una prioridad predeterminada o alta, el sonido no se debe reproducir en la cola principal. –
Además de lo que dijo @JuanPabloBoero, también reproduje el sonido de 0 volumen cuando recibo 'UIApplicationWillEnterForegroundNotification'; de lo contrario, hay un retraso después de que la aplicación se reanuda desde el fondo. – Pang