ios 7不推荐使用的从duck恢复背景音乐的解决方案



我可以在播放新声音时避开背景音频。但是,我无法再次将背景音频级别恢复到最大值。当我的代表试图"解开"时,它总是被躲开。通常的修复方法是AudiossessionSetProperty,但它在iOS 7中被弃用,苹果在弃用警告或文档中没有给出任何提示。

我在视图加载时调用此方法。

- (void) configureAVAudioSession
{
    //get your app's audioSession singleton object
    AVAudioSession* session = [AVAudioSession sharedInstance];
    //error handling
    BOOL success;
    NSError* error;

     success=[session setCategory:AVAudioSessionCategoryPlayback
                 withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];

    if (!success)
    {
         NSLog(@"AVAudioSession error :%@",error);
    }
    else
    {
    }
    success = [session setActive:YES error:&error];
    if (!success) {
        NSLog(@"Error setting active %@",error);
    }
    else
    {
        NSLog(@"succes settings active");
    }

}

这是我播放音频的时候

-(void)playTimeOnGo
{

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"just-like-magic"
                                         ofType:@"mp3"]];
    self.audioPlayer = [[AVAudioPlayer alloc]
                        initWithContentsOfURL:url
                        error:nil];
      self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
    //get your app's audioSession singleton object
    AVAudioSession* session = [AVAudioSession sharedInstance];
    //error handling
    BOOL success;
    NSError* error;

    success=[session setCategory:AVAudioSessionCategoryPlayback
                     withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
    [self.audioPlayer prepareToPlay];
    [self.audioPlayer play];

    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}

当音频完成以恢复背景音频并解除音频时,这是我的代表

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag{
    [self configureAVAudioSession];
    NSLog(@"playback ended");
}

那么,如果没有不推荐的API,我如何再次取消背景音乐?呼叫[self configureAVAudioSession];显然不起作用。。。。

女士们,先生们,我为您提供了一个关于如何在iOS7中正确使用ducking的不推荐使用的工作示例。

在您的"视图加载方法"中,调用这个方法,其中bool设置为YES。这将混合背景音频,并为躲避做好准备

  - (void) configureAVAudioSession:(bool) active
    {
        //get your app's audioSession singleton object
        AVAudioSession* session = [AVAudioSession sharedInstance];
        //error handling
        BOOL success;
        NSError* error;

         success=[session setCategory:AVAudioSessionCategoryPlayback
                     withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];

        if (!success)
        {
             NSLog(@"AVAudioSession error :%@",error);
        }
        else
        {
        }
        success = [session setActive:active error:&error];
        if (!success) {
            NSLog(@"Error setting active %@",error);
        }
        else
        {
            //NSLog(@"success settings active");
        }
 }

使用此方法播放音频文件。看看躲避是怎么发生的。。记住,每次播放新的音频警报时,都要像我在本例中所做的那样设置代理。不要在视图加载方法中设置一次。

-(void)playTimeOnGo
{

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         //alertName is the name of your audio file without extention. extenstions is, doh extenstion like "mp" 
                       pathForResource:_dataManager.optionsSettings.setStarts.alertName
                                        ofType:_dataManager.optionsSettings.setStarts.alertExtension]];
    self.audioPlayer = [[AVAudioPlayer alloc]
                        initWithContentsOfURL:url
                        error:nil];
    self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
    //get your app's audioSession singleton object
    AVAudioSession* session = [AVAudioSession sharedInstance];
    //error handling
    BOOL success;
    NSError* error;

    success=[session setCategory:AVAudioSessionCategoryPlayback
                     withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
    [self.audioPlayer prepareToPlay];
    [self.audioPlayer play];

    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}

学员将在播放后调用此方法,并调大背景音乐的音量:)请不要混淆我正在为此使用线程。如果您愿意,您可以直接调用该方法,但这会使主线程暂停大约一秒钟,甚至两秒钟。所以你可以,不要使用线程,只需调用[self configureAVAudioSession:NO];

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag
{
    _playBackFinishedDelegateThead = [[NSThread alloc] initWithTarget:self selector:@selector(configureAVAudioSession:) object:NO];
    [_playBackFinishedDelegateThead start];
}

这个例子是100%测试和工作在我的应用程序。

相关内容

  • 没有找到相关文章

最新更新