【问题标题】:Playing a sound in iOS pauses background music在 iOS 中播放声音会暂停背景音乐
【发布时间】: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];
}

【问题讨论】:

    标签: objective-c ios audio avaudioplayer avaudiosession


    【解决方案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文件,你的代码看起来不错。很奇怪。这是您项目中唯一尝试开始任何类型音频会话的地方吗?
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多