這個問題在其他幾個問題出在這裏的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