UILocalNotification中的声音比最大音量的AVAudioPlayer更响亮

时间:2013-01-27 15:49:36

标签: ios cocoa avaudioplayer uilocalnotification avaudiosession

出于这个问题的目的,想象我的应用每10秒播放一次音频片段。此音频使用AVAudioPlayer播放/混音设备上的iPod音乐播放器(使用闪避)。当应用程序发送到后台时,我会使用引用的音频文件(并且没有文本)安排UILocalNotification对象,因此声音会以10秒的间隔继续播放。

困扰我的是,在我的应用程序中播放时,作为iOS 6通知的一部分播放的音频剪辑的音量似乎是音频的两倍(我将音量设置为1.0f ,文档说的是max)。因此,应用程序每10秒播放一次声音,当您发送到背景时,它现在与应用程序中的声音相比非常响亮。

相关片段...应用启动,这是我如何设置AVAudioSession以启用闪避:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);

OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,sizeof (allowMixing),&allowMixing);

......我如何创建我的播放器:

- (AVAudioPlayer *)playerWithCAFFileNamed:(NSString *)fname {
    NSURL *u = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:fname ofType:@"caf"]];
    NSData *d = [NSData dataWithContentsOfURL:u];
    AVAudioPlayer *p = [[AVAudioPlayer alloc] initWithData:d error:nil];
    p.delegate = self;
    p.volume = 1.0; 
    [p prepareToPlay];
    return p;
}

...然后播放:

- (void)playAudio:(AVAudioPlayer *)player {
    [self setSessionActiveWithMixing:YES];
    [player setVolume:1.0]; // should already be set, but just to be sure
    [player play];
}

...这就是我如何制作超级大声的通知:

- (UILocalNotification *)notificationWithSoundNamed:(NSString *)sound atTimeInterval:(NSTimeInterval)ti {
    UILocalNotification *n = [[UILocalNotification alloc] init];
    n.soundName = sound;
    n.fireDate = [NSDate dateWithTimeIntervalSinceReferenceDate:ti];
    return n;
}

2 个答案:

答案 0 :(得分:1)

我用Apple打开的错误被关闭为“按设计功能”。他们的简短解释:

  

通知声音跟随铃声音量; AVAudioPlayer遵循媒体量。

...我猜你可以假设铃声音量大于最响亮的媒体音量,以确保你听到铃声。我猜。

答案 1 :(得分:0)

我遇到了与AVAudioPlayer卷类似的问题。因此,我将要分配的值除以我想要得到的因子。值得找到原因。