2009-08-10 4 views
0

Je suis en train d'obtenir un simple bouton pour jouer un son:Pourquoi la lecture d'un .wav avec AVAudioPlayer bloque-t-elle mon simulateur d'iPhone?

-(IBAction)myButton:(id)sender { 
    NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"whistle" ofType:@"wav"]; 
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioFilePath] error:NULL]; 
    [audioPlayer play];  
} 

En utilisant le débogueur, l'appel à « jouer » ne revient jamais. Aucun son n'est joué non plus. Le bouton reste dans l'état en surbrillance jusqu'à ce que je clique sur le bouton d'accueil pour quitter l'application.

Dans le menu du simulateur j'utilise 'Version 2.2 (77.4.9)'.

-Bill

+0

Est-ce que cela se produit dans 3.0? Cela arrive-t-il sur l'appareil? Que faire si vous ne déboguez pas? Est-ce que cela arrive avec d'autres fichiers audio? –

+0

Même comportement si je ne débogue pas. Même comportement avec d'autres fichiers audio. Je ne trouve pas quelle classe j'utilisais auparavant (ne peut avoir qu'un nombre limité de formats, seulement des sons courts, etc.), mais je l'ai fait fonctionner avec cette méthode. L'inconvénient était que je ne pouvais pas démarrer et arrêter mon son, donc après avoir cherché, j'ai appris que c'était la meilleure approche. – Bill

+0

"Même comportement si je ne débogue pas" -> S'accroche avec le buton en surbrillance, non? Qu'en est-il du débogage? Est-ce qu'il joue le son alors et allume le bouton après? – mahboudz

Répondre

0

Pourrait-il être un mauvais fichier son? Que se passe-t-il si au lieu de -play vous appelez -prepareToPlay?

+0

Même comportement. Double-cliquez sur le fichier .wav dans Xcode pour le lire dans iTunes. – Bill

+0

J'ai juste essayé votre code, et cela fonctionne très bien dans un exemple d'application créé à partir du modèle d'application View Based de Xcode. Maintenant, vous ne libérez pas l'audioPlayer, n'est-ce pas? Le seul endroit où il serait sécuritaire de le relâcher est soit dans un rappel AVAudioPlayer ou lorsque votre application quitte (eh bien, en fait, il serait prudent de le relâcher quand vous êtes sûr que le son a déjà été joué). -autorelease a les mêmes problèmes puisque votre son sera joué après que le runloop est terminé et que le pool autorelease a été libéré. – mahboudz

+0

Si vous ne parlez pas, l'autre endroit que je vérifierais est de savoir si commenter [lecture audioPlayer] finirait par suspendre votre application. Étant donné que le jeu met en file d'attente la lecture réelle pour plus tard et revient presque immédiatement, vous pouvez avoir quelque chose d'autre qui laisse votre application dans un état étrange. – mahboudz

0

Je ne sais pas si c'est le même problème, mais AVAudioPlayer faisait aussi planter mon simulateur 2.2.x. Dans mon cas, il se trouve un plugin à l'intérieur/Library/QuickTime/(en particulier, DivX Decoder.component) était en train de jouer avec le simulateur. J'ai simplement déplacé le fichier temporairement sur mon bureau, puis le simulateur a recommencé à fonctionner pour moi.

Questions connexes