0

我一直在努力学习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];

现在我的示例应用程序也在后台播放声音。然后我遇到了另一个问题。如果我将睡眠放在所有这些处理之前,请在睡眠期间将我的应用程序置于后台并开始从其他应用程序播放音乐,在这种情况下,我的应用程序无法播放声音。这可能是因为它没有获得其他音乐应用程序所占用的音频会话。

问题 1.我知道有一种方法可以检测是否有任何其他声音正在播放,但我找不到如何停止它。有一些方法可以停止像 iPod 这样的标准应用程序声音,但是否有任何通用方法可以停止任何其他应用程序的声音。 2. [player play];给出NO失败的结果。我如何找到失败的原因。我已经实现audioPlayerDecodeErrorDidOccur:error:了方法,但它从未被调用过。

请分享您对此的了解。我已经解决了大多数关于相同问题的堆栈溢出问题,但没有发现任何对这个特定问题有用的东西。

4

1 回答 1

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];
}
于 2013-02-22T08:43:52.383 回答