2013-02-22 2 views
0

J'ai essayé d'apprendre AVAudioPlayer et son comportement.Problème de gestion du comportement d'AVAudioPlayer

Donc, pour commencer, je l'avais écrit

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; 
player.numberOfLoops = -1; 
[player play]; 

Il ne fonctionnait bien aussi longtemps que l'application ne sont pas entrés arrière-plan. Donc, je cherchais encore et trouvé que je dois ajouter une entrée dans plist et ont également écrit le code suivant

NSError *activationError = nil; 
    if([[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&activationError] == NO) 
     NSLog(@"*** %@ ***", activationError); 

    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

Maintenant, mes pièces d'application en arrière-plan sonore échantillons aussi bien. Puis j'ai rencontré un autre problème. Si je mets le sommeil avant tout ce traitement, prendre mon application en arrière-plan pendant le sommeil et commencer à jouer de la musique à partir d'une autre application, dans ce cas mon application ne peut pas jouer de son. C'est probablement parce qu'il n'obtient pas la session audio qu'une autre application musicale a prise.

Questions 1. Je comprends qu'il ya un moyen de détecter si une autre lecture d'un son, mais je ne pouvais pas trouver comment puis-je l'arrêter. Il existe des méthodes pour arrêter le son de l'application standard comme iPod, mais existe-t-il une méthode générique pour arrêter le son de toute autre application. 2.[player play]; donne NO comme résultat qui est l'échec. Comment puis-je trouver ce que l'échec a causé. J'ai implémenté la méthode audioPlayerDecodeErrorDidOccur:error:, mais elle n'est jamais appelée.

Veuillez partager vos connaissances à ce sujet. J'ai déjà passé à travers la plupart des questions de débordement de pile concernant la même chose, mais je n'ai rien trouvé d'utile à ce problème particulier.

+0

s'il vous plaît imprimer votre soundFileURL –

+0

@Manohar: utilisé le code ci-dessous pour obtenir l'URL 'NSString * soundFilePath = [[NSBundle mainBundle] pathForResource: @ "son" ofType: @ "mp3"]; NSURL * soundFileURL = [NSURL fileURLWithPath: soundFilePath]; ' Cela a fonctionné jusqu'à ce que l'application soit en arrière-plan et que rien d'autre ne soit joué. Donc, je ne pense pas que l'URL est un problème ici. – Sagrian

+0

NSURL * soundFileURL = [URLLigneSSURL: soundFilePath]; essayez ceci –

Répondre

0
-(void)loadPlayer 
{ 
     NSURL *audioFileLocationURL = [NSURL URLWithString:[[NSBundle mainBundle] URLForResource:@"01-YedhiYedhi[www.AtoZmp3.in]" withExtension:@"mp3"]]; 
     NSError *error; 
     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL error:&error]; 
     [audioPlayer setNumberOfLoops:-1]; 
     if (error) 
     { 
      NSLog(@"%@", [error localizedDescription]); 

      [[self volumeControl] setEnabled:NO]; 
      [[self playPauseButton] setEnabled:NO]; 

      [[self alertLabel] setText:@"Unable to load file"]; 
      [[self alertLabel] setHidden:NO]; 
     } 
     else 
     { 
      [[self alertLabel] setText:[NSString stringWithFormat:@"%@ has loaded", str]]; 
      [[self alertLabel] setHidden:NO]; 

      //Make sure the system follows our playback status 
      [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
      [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

      //Load the audio into memory 
      [audioPlayer prepareToPlay]; 
     } 
    } 
    if (!self.audioPlayer.playing) { 
     [self playAudio]; 

    } else if (self.audioPlayer.playing) { 
     [self pauseAudio]; 

    } 
} 

- (void)playAudio { 
    [audioPlayer play]; 
} 
+0

Qu'est-ce que alertLabel et pourquoi l'utiliser? Je ne veux aucune interaction de l'utilisateur dans ce domaine. Sont également 'audioPlayer' et 'self. audioPlayer 'différent? – Sagrian

+0

commenter ce alertlabel –

+0

Manohar votre code semble être incomplète. Je ne connais pas la réponse 2 ma 2n question. aussi l'implémentation '[self playAudio]' n'est pas donnée. Est-ce juste '[play player]'. – Sagrian

Questions connexes