2009-07-29 5 views
1

j'initialiser une instance de AVAudioPlayer:AVAudioPlayer ne répond pas

NSString* path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"wav"]; 

AVAudioPlayer* player =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; //Returned object not nil, indicating that the file has loaded successfully 


BOOL b = [player prepareToPlay]; //returns TRUE 

BOOL b2 = [player play]; 
//returns TRUE, goes immediately to the next line since asynchronous 


[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]; //wait 1 sec 

printf("%10.4f\n",player.duration); //duration is 2s 

printf("%10.4f\n",player.currentTime); //position remains 0 

/* There is no sound output, player is also stuck since position==0 */ 

Est-ce que quelqu'un sait pourquoi le AVAudioPlayer ne répond pas? Y a-t-il quelque chose que je néglige pendant l'initialisation, en jouant l'audioplayer? Code de Boilerplate peut-être? Je cours ceci sur le simulateur d'iPhone. En outre, AudioServicesPlaySystemSound() fonctionne pour le même fichier, ce qui est déroutant, mais cela indique que la lecture audio peut également fonctionner avec AVAudioPlayer.

Répondre

2

J'ai 2 suggestions rapides:

  1. Vérifiez si ce chemin vous donne en fait des données. Allockez un objet NSData en utilisant [[NSData alloc] initWithContentsOfFile: path] et inspectez-le dans le débogueur pour voir si vous chargez réellement ce fichier wav. J'ai écrit un exemple de projet utilisant AVAudioPlayer ici: AVAudioPlayer Example. Comme le code est à peu près le même que le vôtre, la seule chose que je peux imaginer est qu'il y a un problème avec vos données.

Jetez un coup d'œil pour voir si cela vous permet de vous déplacer!

2

Je viens d'avoir un problème similaire. Je ne suis pas sûr si c'est la même solution, mais mon application enregistre l'audio par l'intermédiaire de l'iphone et le rejoue ensuite à l'utilisateur.

Je pensais que je faisais la bonne chose en disant ma session audio qu'il allait enregistrer des données, donc je ne les éléments suivants:

[audioSession setCategory:AVAudioSessionCategoryRecord error:nil]; 

En utilisant cette lecture de réglage travaillé sur le simulateur mais pas sur la device .... l'événement didFinishPlaying n'a jamais été déclenché.

J'ai retiré cette ligne après m'être rendu compte que je n'en avais pas besoin car une lecture audio a commencé à fonctionner correctement. Maintenant, j'ai juste besoin de savoir pourquoi il est si calme :)

Paul

Questions connexes