0

いくつかのサウンドがすでに再生されているシンプルなiPhoneアプリがあります。ただし、特に1つはそうではありません。私がハックしたコードブロックは次のとおりです。

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を返し、期間も正しいことが示されます。それでも、遊びは何もしません。「ゲームオーバー」を別の音(単純なビープ音)に変更すると、すべて問題ありません。

それをプレイするのは素晴らしいことですが、どのようなエラー状態などを理解するのにも苦労しています。1)失敗したことと2)理由を確認できます。

質問の音はhttp://wdr1.com/gameover.wavで入手できます。

4

1 に答える 1

4

問題は、AVAudioPlayerを自動リリースするべきではないということです。playメソッドは非同期で実行され、プレーヤーが自動解放された場合、何も保持されておらず、ただ死んでしまいます。

デリゲートでのプレーヤーの再生が終了したら、オーディオプレーヤーを解放する必要があります。

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
于 2009-11-26T21:20:38.760 に答える