这个问题已经出现在其他几个问题中:
第一次播放声音时 AVAudioPlayer 启动缓慢
使用 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但不播放,那么当我单击第一个对象时,我会观察到音频延迟。但是,如果我在虚拟音频播放器上调用 play,那么我不会得到初始对象的延迟,但视图加载会延迟 2 秒。
有办法解决这个问题吗?我是否应该简单地在加载时创建一个 AVAudioPlayers 的 NSArray 并告诉它们准备播放,然后在单击对象时调用播放?
有时它可以帮助让viewDidLoad
通过像这样使用假脱机初始化来返回peformSelector:withObject:afterDelay:
。例如:
- (void)viewDidLoad{
// initialization ...
[super viewDidLoad];
[self performSelector:@selector(primeAudioPlayer) withObject:nil afterDelay:0.1];
}
-(void)primeAudioPlayer {
NSString *soundFile = [Card loadCardSoundPath:@"dummy"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:soundFile] error:nil];
[audioPlayer prepareToPlay];
[player release];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)