如何调试AVAudioPlayer无法播放声音的原因?

时间:2009-11-26 21:06:55

标签: objective-c iphone cocoa avaudioplayer

我有一个简单的iPhone应用程序,已经播放了几个声音。但是,其中一个特别不会。我破解的代码块是:

NSString *soundPath2 = [[NSBundle mainBundle] pathForResource:@"gameover" ofType:@"wav"];
NSURL *soundFileURL2 = [NSURL fileURLWithPath:soundPath2];
NSError *err;
AVAudioPlayer *sound2 = [[[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL2 error:&err] autorelease];
NSLog(@"Error: %@", [err description]);
NSLog(@"Duration: %f ", [sound2 duration]);
BOOL b = [sound2 play];
NSLog(@"Play Bool: %d", b);

控制台显示错误为null,布尔值返回true,甚至持续时间都是正确的!然而,游戏什么都不做。如果我将“gameover”更改为另一种声音(简单的哔哔声),一切都很好。

虽然玩它会很棒,但我也很难理解错误条件等等。我可以检查1)知道它失败了2)为什么。

声音问题可在http://wdr1.com/gameover.wav处找到。

1 个答案:

答案 0 :(得分:4)

问题是你不应该自动释放AVAudioPlayer。播放方法是异步发生的,如果播放器被自动释放,那么没有任何东西可以保持它并且它将会死亡。

一旦玩家在代表中完成游戏,你应该释放你的音频播放器:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag