AVAudioPlayer ne joue aucun son

Je travaille sur une application iOS qui doit lire des sons en utilisant le framework AVFoundation . La structure de l’espace de travail dans Xcode 4 contient deux projets:

  • Espace de travail
    • L’application elle-même (projet principal)
    • Une bibliothèque d’utilitaires

Après la construction de la bibliothèque d’utilitaires, il en résulte une bibliothèque statique utilisée dans l’application principale en tant que structure.

Ainsi, lorsque vous essayez de lire un son dans l’application principale en utilisant le code ci-dessous, cela fonctionne comme prévu.

 NSSsortingng *resourcePath = [[NSBundle mainBundle] resourcePath]; NSSsortingng *path = [NSSsortingng ssortingngWithFormat:@"%@/sound.mp3", resourcePath]; NSURL *url = [NSURL fileURLWithPath:path]; NSError *error = nil; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; [audioPlayer play]; 

En revanche, lorsque vous essayez de lire exactement le même son (ou tout autre) dans la bibliothèque d’utilitaires en utilisant le même code, aucun son n’est joué, même si l’erreur est nulle et que les valeurs de la propriété audioPlayer sont correctes (nombre des canaux, durée).

Je me suis assuré que le framework AVFoundation dans les deux projets.

En outre, ma classe utilise le protocole AVAudioPlayerDelegate et implémente ces deux méthodes:

 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag; - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error; 

Aucune de ces méthodes n’est appelée après avoir essayé de jouer le son.

Si j’utilise le framework AudioToolbox place, alors il joue le son. Mais je suis intéressé par l’utilisation de AVFoundation pour plusieurs raisons.

Une idée de ce qui se passe? Est-ce que je manque quelque chose à propos d’ AVFoundation ? Pourrait-il être lié à l’utilisation de AVAudioPlayer depuis une bibliothèque statique?

Merci d’avance.

J’ai trouvé la solution qui est liée à quelque chose que je n’ai pas mentionné et à laquelle je n’ai pas pensé: je comstack avec ARC (Automatic Reference Counting).

ARC insère un appel de libération au lecteur audio, il est donc désalloué immédiatement après avoir quitté la méthode où il a été créé. Cela n’a rien à voir avec AVAudioPlayer mais avec ARC.

Afin de résoudre ce problème, je viens de créer un atsortingbut AVAudioPlayer dans la classe qui traite les sons afin qu’il ne soit plus publié par ARC. Eh bien, au moins, il n’est pas publié tant que l’instance de cette classe n’est pas sortie.

Pour plus d’informations sur ARC, reportez-vous à la section Comptage automatique des références: mise à zéro des références faibles avec les détails expliquant pourquoi j’ai rencontré ce problème.

Oui absolument; ARC était aussi la raison avec mon code.

J’ai introduit une propriété:

 @property (strong, nonatomic) AVAudioPlayer *audioPlayer; 

et ça a bien fonctionné.

utilisez ça ça marchera définitivement ….

 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; NSURL *url = [NSURL fileURLWithPath:@"path of the sound file :)"]; _player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [_player setDelegate:self]; [_player prepareToPlay]; [_player play]; 

Avez-vous configuré AVAudioSession?

J’ai eu un problème similaire et corrigé en utilisant quelque chose comme ceci:

 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:NULL]; 

ou

 [audioSession setCategory:AVAudioSessionCategoryPlayback error:NULL]; 

J’espère que cela aide.

Même si audioPlayer var est déclaré dans la scope de la classe, il ne sera pas lu. Au moins sur iOS 10 iPhone 5c périphérique physique.

play() est true donc aucune erreur ne semble se produire.

J’ai dû append ceci ( Swift 3, 4 ) et maintenant il joue correctement le son.

 let session = AVAudioSession.sharedInstance() try! session.setCategory(AVAudioSessionCategoryPlayback) 

J’ai créé un projet open source pour un lecteur audio simple. Jetez un oeil si vous avez des problèmes avec la lecture audio sur iOS (en arrière-plan aussi): https://github.com/wzbozon/DKAudioPlayer

S’il vous plaît restz sur la page pendant un certain temps, je faisais face au même problème. et utiliser le sumil pour le résoudre.


 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sounds-1027-are-you-kidding" ofType:@"mp3"]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audioPlayer play]; sleep(2); 

J’ai eu le même problème. Je l’avais résolu en ajoutant la ligne ci-dessous dans le fichier .h:

 @property (strong, nonatomic) AVAudioPlayer *audioPlayer; 

Et dans le fichier .m:

 NSError *error; NSSsortingng *soundFilePath = [NSSsortingng ssortingngWithFormat:@"%@/dancepechance.mp3", [[NSBundle mainBundle] resourcePath]]; NSURL *url = [NSURL fileURLWithPath:soundFilePath]; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; NSLog(@"Error %@",error); [self.audioPlayer prepareToPlay]; [self.audioPlayer play]; 

Vous pouvez utiliser AVPlayerViewController d’ AVKit à la fois pour l’audio et la vidéo. Le code est disponible pour c rapide et objective c ici .

Solution rapide:

  import AVFoundation // define your player in class var player = AVAudioPlayer() override func viewDidLoad() { super.viewDidLoad() }