暂停音频文件以播放不同的音频文件

时间:2016-05-25 23:49:42

标签: ios objective-c avfoundation

我正在使用systemMusicPlayer在应用内播放歌曲。

如果用户在“正在播放”视图上按noiseButton,它将暂停systemMusicPlayer歌曲音频文件10秒钟以播放noiseButton音频文件,然后重新选择systemMusicPlayer歌曲音频文件。

我能够暂停systemMusicPlayer首歌曲音频文件,然后在10秒后重新选择,但是我无法让noiseButton播放其声音10秒。

  • 我知道noiseButton音频文件有效
  • NSLog在播放noiseButton文件
  • 的方法前后{g}

我不确定我错过了什么?

这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    musicPlayer = [MPMusicPlayerController systemMusicPlayer];
    [self registerMediaPlayerNotifications];

    // Construct URL to sound file
    NSString *path = [NSString stringWithFormat:@"%@/background-music-aac.caf", [[NSBundle mainBundle] resourcePath]];
    NSURL *soundUrl = [NSURL fileURLWithPath:path];

    // Create audio player object and initialize with URL to sound
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
}

- (void)willPlayClip {
    [NSTimer scheduledTimerWithTimeInterval:10.0
                                     target:self
                                   selector:@selector(willPlayMusicInTenSeconds:)
                                   userInfo:nil
                                    repeats:NO];
}

- (void)willPlayMusicInTenSeconds:(NSTimer *)timer {
    NSLog(@"Get ready to Play noise sound");
    [_audioPlayer play];
    NSLog(@"Play noise sound");

    [musicPlayer play];
    NSLog(@"Start playing again");
}

noiseButton内的代码,当它被按下时:

if ([musicPlayer playbackState] == MPMusicPlaybackStatePlaying) {
    [musicPlayer pause];
    NSLog(@"Paused!");
    [self willPlayClip];
} else {
    NSLog(@"Already paused");
}

1 个答案:

答案 0 :(得分:1)

您设置了什么AudioSession类别?如果您不是,请参阅此文档:

Audio Session Categories

如果您将会话设置为AVAudioSessionCategoryAmbient

,我相信您应该获得所需的行为
  

声音播放非主要应用的类别 - 也就是说,您的应用可以在关闭声音的情况下成功使用。

     

此类别也适用于“播放”风格的应用,例如用户在播放音乐应用时播放的虚拟钢琴。使用此类别时,来自其他应用程序的音频会与您的音频混合。通过屏幕锁定和静音开关(在iPhone上称为响铃/静音开关)使您的音频静音。

如果您尚未尝试,请尝试一下。