我正在尝试消除通过 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 有关。如果我加载任何音频,运行 [audioPlayerprepareToPlay],然后立即释放它,则所有其他音频的加载时间非常接近难以察觉。所以现在我在 applicationDidFinishLaunching 中执行此操作,其他一切都运行良好。
我在文档中找不到任何有关此内容的信息,但情况似乎确实如此。
关于iphone - 第一次播放声音时 AVAudioPlayer 启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900461/