在 iOS 中播放声音会暂停背景音乐

Posted

技术标签:

【中文标题】在 iOS 中播放声音会暂停背景音乐【英文标题】:Playing a sound in iOS pauses background music 【发布时间】:2012-11-15 01:00:27 【问题描述】:

如何在不暂停背景音乐的情况下在 ios 中播放声音?

我有这个:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"alert" ofType:@"wav"];
NSURL *url = [NSURL URLWithString:soundPath];

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:nil];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];

然而任何背景音乐都停止了。我错过了什么?

我也试过了,没用:

- (void)alarm:(CDVInvokedUrlCommand *)command 
    [self setupAudioSession];
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"alert" ofType:@"wav"];
    NSURL *url = [NSURL URLWithString:soundPath];

    AVPlayer *audioPlayer = [[AVPlayer alloc] initWithURL: url];
    [audioPlayer play];


- (void)setupAudioSession 
    AudioSessionInitialize(NULL,NULL,NULL,NULL);

    OSStatus activationResult = 0;
    activationResult          = AudioSessionSetActive(true);

    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

    AudioSessionSetProperty
    (
     kAudioSessionProperty_AudioCategory,
     sizeof(sessionCategory),
     &sessionCategory
     );

    OSStatus propertySetError = 0;
    UInt32 allowMixing        = true;

    propertySetError = AudioSessionSetProperty
    (
     kAudioSessionProperty_OverrideCategoryMixWithOthers,
     sizeof(allowMixing),
     &allowMixing
     );
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

【问题讨论】:

【参考方案1】:

您需要设置适当的音频会话,如下所示:

AudioSessionInitialize(NULL,NULL,NULL,NULL);

OSStatus activationResult = 0;
activationResult          = AudioSessionSetActive(true);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;

AudioSessionSetProperty
(
    kAudioSessionProperty_AudioCategory,
    sizeof(sessionCategory),
    &sessionCategory
 );

OSStatus propertySetError = 0;
UInt32 allowMixing        = true;

propertySetError = AudioSessionSetProperty
(
    kAudioSessionProperty_OverrideCategoryMixWithOthers,
    sizeof(allowMixing),
    &allowMixing
);

【讨论】:

奇怪,当我使用AVPlayer 时,它似乎工作得很好。 AVPlayer 适合您吗?可能你可以尝试一下,至少看看代码是否正常工作(它应该)。 我用我尝试的方法更新了我的示例,背景声音正在停止。 取出最后一行[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 仍然停止音乐。这是一个 wav 的事实吗? 不应该,我也在播放一个wav文件,你的代码看起来不错。很奇怪。这是您项目中唯一尝试开始任何类型音频会话的地方吗?

以上是关于在 iOS 中播放声音会暂停背景音乐的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript淡入/淡出播放/暂停音乐

使用 AVAudioPlayer 播放声音后恢复背景音频

IOS - 暂停和取消暂停当前播放的音乐

如何在播放/暂停控制功能中停止无限循环

使用播放/暂停/停止按钮控制 Flash 视频的声音

EasyPlayer声音自动停止恢复,一键静音等功能