Question

J'ai une application iPhone simple avec plusieurs sons en cours de lecture. Cependant, un en particulier ne le fera pas. Le bloc de code que j'ai piraté est le suivant:

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 indique que l'erreur est nulle, le booléen renvoie true et même la durée est correcte! Pourtant, le jeu ne fait rien. Si je change de & game; gameover " à un autre son (un bip), tout va bien.

Bien que ce soit formidable de le faire jouer, j'ai du mal à comprendre quelles conditions d'erreur, etc. Je peux vérifier: 1) savoir que cela a échoué et 2) pourquoi.

La question sur le son est disponible à l'adresse http://wdr1.com/gameover.wav .

Était-ce utile?

La solution

Le problème est que vous ne devriez pas autoreleasing le AVAudioPlayer. La méthode de lecture est asynchrone et si le lecteur est auto-libéré, rien ne l’accrochera et il mourra.

Vous devez libérer votre lecteur audio une fois que le lecteur a fini de jouer dans le délégué:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)audioPlayer successfully:(BOOL)flag
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top