我正在尝试通过iPhone上的AVAudioPlayer播放一个非常短的音频文件(少于2秒),并消除启动延迟。
首先,是代码:
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对象并在低内存条件下积极清除它们吗?
UIApplicationWillEnterForegroundNotification
时,我还会播放0音量的声音,否则在应用程序从后台恢复后会有延迟。 - Pang