我试图通过 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 对象并在内存不足的情况下积极清除它们?