Проблема обработки поведения 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];

Теперь мое приложение-пример воспроизводит звук в фоновом режиме. Тогда я столкнулся с другой проблемой. Если я поместил режим сна перед всей этой обработкой, возьму мое приложение в фоновом режиме во время сна и начну воспроизводить музыку из какого-либо другого приложения, в этом случае мое приложение не сможет воспроизводить звук. Вероятно, потому, что он не получает аудиосессию, которую выполняло какое-то другое музыкальное приложение.

Вопросы 1. Я понимаю, что есть способ определить, воспроизводится ли какой-либо другой звук, но я не смог найти, как мне его остановить. Существуют методы для остановки звука стандартного приложения, такого как iPod, но есть ли какой-либо общий метод, чтобы остановить звук из любого другого приложения. 2. [player play]; дает NO как результат, который является неудачей. Как мне найти, что вызвало сбой. Я реализовал audioPlayerDecodeErrorDidOccur:error: метод, но он никогда не вызывается.

Пожалуйста, поделитесь своими знаниями по этому вопросу. Я уже рассмотрел большинство вопросов о переполнении стека относительно того же самого, но не нашел ничего полезного для этой конкретной проблемы.

1 ответ

-(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];
}
Другие вопросы по тегам