【发布时间】:2010-10-28 09:05:59
【问题描述】:
我正在尝试通过 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 可确保在应用程序的其余部分中无延迟地播放音频。
-
@johnbiesnecker 播放任何音量为 0 的声音,然后所有声音播放调用都应在异步全局队列块内,具有默认或高优先级,不应在主队列中播放声音。
-
除了@JuanPabloBoero说的,我收到
UIApplicationWillEnterForegroundNotification的时候也播放了0音量的声音,不然后台恢复app会有延迟。 -
@Pang 哇,我错过了,非常有趣的一点。
标签: iphone caching audio nsdata avaudioplayer