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

Posted

技术标签:

【中文标题】UILocalNotification 中的声音在最大音量下比 AVAudioPlayer 响亮【英文标题】:Sounds in UILocalNotification louder than AVAudioPlayer at max volume 【发布时间】:2013-01-27 15:49:36 【问题描述】:

就这个问题而言,假设我的应用每 10 秒播放一次音频剪辑。此音频使用 AVAudioPlayer 与设备上的 iPod 音乐播放器播放/混合(使用闪避)。当应用程序被发送到后台时,我安排 UILocalNotification 对象与引用的音频文件(并且没有文本),所以声音继续以 10 秒的间隔播放。

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

相关的 sn-ps... 应用启动,这是我设置 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;

【问题讨论】:

已经创建了一个示例应用程序,并在这个应用程序上向 Apple 提出了一个错误。 【参考方案1】:

我在 Apple 中打开的错误被关闭为“按设计的功能”。他们的简要说明:

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

...我想您可以假设振铃器的音量被允许大于最大的媒体音量,以确保您听到振铃器。我猜。

【讨论】:

【参考方案2】:

我遇到了与 AVAudioPlayer 音量类似的问题。所以我将我想要分配的价值除以我想要得到的因素。不过值得找到原因。

【讨论】:

这里有点困惑 - 您将音量设置除以某个数字以降低音量? 1.0 是最大值,是吗?我看不出降低音频输入应用程序将如何解决我的问题。 (我的问题是应用音量低于 UINotification 音量 - 我无法控制) 为音量分配 0.5 代替 1.0。同样,如果要分配 0.5,除以 2 并分配 0.25。这是我使用的解决方法。 我了解除法的工作原理,为什么将音量设置为 0.5 会比设置为 1.0 响亮是不合逻辑的。思考逻辑可能在这里没有发挥作用,我接受了你的建议 - 音频大约是正常音量的一半(现在是通知播放音量的 1/4),这是我的预期。

以上是关于UILocalNotification 中的声音在最大音量下比 AVAudioPlayer 响亮的主要内容,如果未能解决你的问题,请参考以下文章

UILocalNotification 声音未在设备上播放

在 UILocalNotification 声音集录制的音频

如何检测 UILocalnotification 声音是不是正在播放

如何在 UILocalNotification 中设置用户铃声的声音?

UILocalNotification 声音未播放

静音模式下的 UILocalNotification 声音