2013-02-22 80 views
0

我一直在努力學習AVAudioPlayer它的行爲。AVAudioPlayer行爲處理問題

於是開始與我寫

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

只要應用程序沒有進入後臺它確實行之有效。所以,我再次搜索,發現我需要添加的plist條目,還寫了下面的代碼

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

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

現在我的示例應用程序播放聲音在背景爲好。然後我遇到了另一個問題。如果我在進行所有這些處理之前進行了睡眠,請在睡眠期間將我的應用程序放在背景中,然後從其他應用程序開始播放音樂,在這種情況下,我的應用程序無法播放聲音。這可能是因爲它沒有得到其他音樂應用程序所採用的音頻會話。

問題 我明白,有是否有其他聲音響起來檢測的方式,但我找不到我怎麼阻止它。有些方法可以阻止iPod等標準應用程序聲音,但有沒有其他通用方法可以阻止任何其他應用程序的聲音。 2.[player play];給出NO作爲失敗的結果。我如何找到造成失敗的原因。我已經實施了audioPlayerDecodeErrorDidOccur:error:方法,但它永遠不會被調用。

請分享你的知識。我已經經歷了大部分關於相同的堆棧溢出問題,但沒有發現對這個特定問題有用的任何東西。

+0

請打印soundFileURL – 2013-02-22 06:34:16

+0

@Manohar:使用下面的代碼獲取URL '的NSString * soundFilePath = [[一個NSBundle mainBundle] pathForResource:@ 「聲音」 ofType:@ 「MP3」]; NSURL * soundFileURL = [NSURL fileURLWithPath:soundFilePath];' 它確實工作,直到應用程序在後臺,沒有其他人在玩。所以我不認爲URL在這裏有任何問題。 – Sagrian 2013-02-22 06:54:05

+0

NSURL * soundFileURL = [NSURL URLWithString:soundFilePath];試試這個 – 2013-02-22 07:07:08

回答

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

什麼是alertLabel,爲什麼你需要使用它?我不希望任何用戶交互。也是'audioPlayer'和'self。 audioPlayer'不同? – Sagrian 2013-02-22 10:03:22

+0

comment alertletel – 2013-02-22 10:17:45

+0

Manohar你的代碼似乎不完整。我不知道答案2我的問題。也沒有給出'[self playAudio]'的實現。它只是'[玩玩]'。 – Sagrian 2013-02-22 13:28:17