这个问题在其他几个问题出在这里的SO AVAudioPlayer滞后:试图修复它最初使用
Slow start for AVAudioPlayer the first time a sound is played
Delay in playing sounds using AVAudioPlayer
我试图实现修复建议,但没有的他们正在解决我的问题。我的应用程序向用户呈现要触摸的物体的网格,当物体被触摸时播放声音。除了最初的触摸之外,这种方法很有效,延迟时间约为2秒。
为了解决这个问题我初始化我的音频播放器与虚拟AIFF文件:
- (void)viewDidLoad{
NSString *soundFile = [Card loadCardSoundPath:@"dummy"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:soundFile] error:nil];
self.audioPlayer = player;
[audioPlayer setDelegate:self];
[audioPlayer prepareToPlay];
// [audioPlayer play];
[player release];
...
[super viewDidLoad];
}
然后,当一个对象被触摸我打电话:
NSString *soundFile = [Card loadCardSoundPath:name];
if (soundFile != nil){
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:soundFile] error:nil];
self.audioPlayer = player;
[self.audioPlayer setDelegate:self];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
[player release];
}
我正在观察的行为是这样的:如果我创建了一个虚拟音频播放器并调用prepareToPlay但不播放,则单击第一个对象时会观察到音频延迟。但是,如果我在虚拟音频播放器上调用播放器,那么我不会在初始对象上获得延迟,但视图负载会延迟2秒。
有没有办法解决这个问题?我应该简单地创建一个负载的AVAudioPlayers的NSArray,并告诉他们所有准备播放,然后在点击对象时调用播放?
我结束了创建一个NSArray含AVAudioPlayer对象都曾经有过prepareToPlay他们叫。这工作得很好,虽然我希望有人会提出一个更优雅的解决方案。 – slayton 2011-04-16 04:32:46