Я пытаюсь устранить задержку запуска при воспроизведении аудиофайла (очень короткого - менее 2 секунд) через AVAudioPlayer на iPhone.Медленный запуск для AVAudioPlayer при первом воспроизведении звука
Во-первых, код:
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];
Я также реализовать метод audioPlayerDidFinishPlaying, чтобы освободить AVAudioPlayer как только я сделал.
В первый раз, когда я воспроизвожу аудио, отставание ощутимо - не менее 2 секунд. Однако после этого звук воспроизводится немедленно. Я подозреваю, что виновником является то, что [NSData dataWithContentsOfMappedFile] долгое время читает со вспышки, но затем быстро переходит к более позднему чтению. Я не уверен, как это проверить.
Это тот случай? Если да, должен ли я просто предварительно кэшировать объекты NSData и быть агрессивным относительно их очистки в условиях низкой памяти?
Благодарим за информацию. Вы должны ответить на вопрос и принять свой ответ. Инициализация AVAudioPlayer при запуске обеспечила воспроизведение звука без задержки в остальной части приложения. – brianegge
@johnbiesnecker воспроизводит любой звук с томом 0, тогда все вызовы звукового воспроизведения должны быть внутри блока глобальной очереди async с приоритетом по умолчанию или с высоким приоритетом, звук не должен воспроизводиться в основной очереди. –
В дополнение к тому, что сказал @JuanPabloBoero, я также играл громкость звука 0 при получении 'UIApplicationWillEnterForegroundNotification', иначе будет задержка после возобновления приложения с фона. – Pang