我正在尝试通过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/

10-12 01:11