我正在尝试通过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对象,并积极地在内存不足的情况下清除它们?
最佳答案
延迟似乎与第一次实例化AVAudioPlayer有关。如果我加载任何音频,请运行[audioPlayer prepareToPlay],然后立即将其释放,所有其他音频的加载时间都非常难以察觉。因此,现在我在applicationDidFinishLaunching中执行此操作,其他所有操作都运行良好。
我在文档中找不到关于此的任何信息,但确实是事实。
关于iphone - 第一次播放声音时AVAudioPlayer的启动缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/900461/