2009-11-26 3 views
0

J'ai une application iPhone simple avec plusieurs sons déjà en cours de lecture. Cependant, un en particulier ne sera pas. Le bloc de code que j'ai piraté est en place:Comment déboguer pourquoi un son ne sera pas lu via AVAudioPlayer?

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); 

La console affiche l'erreur est nulle, les rendements booléennes vrai, et même la durée est correcte! Pourtant, le jeu ne fait rien. Si je change de "gameover" en un autre son (un simple bip), tout va bien.

Alors que ce serait génial de le faire jouer, j'ai aussi du mal à comprendre quelles conditions d'erreur, etc. Je peux vérifier à 1) savoir qu'il a échoué et 2) pourquoi.

Le son est question est disponible à http://wdr1.com/gameover.wav.

Répondre

4

Le problème est que vous ne devez pas libérer automatiquement AVAudioPlayer. La méthode de jeu se déroule de manière asynchrone et si le joueur obtient sa libération automatique, rien ne la retient et il mourra.

Vous devez libérer votre lecteur audio une fois que le joueur fait jouer dans le délégué:

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

qui l'a fait! Merci. – Bill

+1

J'ai eu une chose étrange en utilisant A.R.C. où l'OS libérait prématurément mon objet. Cela m'a rendu fou !!! J'ai fini par sauvegarder le lecteur dans un cache (dictionnaire) pour le faire jouer. – Olie

Questions connexes