Why are non-critical notifications quieter than critical alerts at max volume?

When I turn the Ringtone and Alerts volume all the way up, I expect standard notifications to play at the loudest level the device allows. In theory, this should match the volume of a critical alert with its sound.volume set to 1.0 in payload.

However, I’ve noticed that non-critical notifications still play quieter than critical alerts under these conditions. Critical alerts with volume: 1.0 sound noticeably louder than standard notifications, even though the Ringtone and Alerts slider is already set to maximum. And I couldn't find a documentation for this behavior anywhere.

Is this expected behavior on iOS? And is there any way to make non-critical notifications play at the same maximum loudness as critical alerts?

Thanks in advance for any clarification.

Answered by DTS Engineer in 858100022

Is this expected behavior on iOS?

Yes.

And is there any way to make non-critical notifications play at the same maximum loudness as critical alerts?

No.

I describe what is happening below, but by design, the audio session configuration that's being used cannot be configured or activated by any application.

As to why...

However, I’ve noticed that non-critical notifications still play quieter than critical alerts under these conditions. Critical alerts with volume: 1.0 sound noticeably louder than standard notifications, even though the Ringtone and Alerts slider is already set to maximum. And I couldn't find any documentation for this behavior anywhere.

I'm not sure we ever documented it formally, but the behavior here has actually been true "forever“. It’s just easy to overlook unless you know what you're looking for. The key clue here is that if you compare the max volume of a standard PlayAndRecord audio session with the maximum volume of a CallKit call, you'll find exactly the same difference in volume.

What's going on here is that from the very beginning*, there has been a private "telephone" AudioSession which is similar to a PlayAndRecord session, but this has higher priority, different interruption rules, and... a slightly higher maximum volume. Note that this volume difference was very well known (and complained about...) to VoIP developers and, in fact, was one of the things highlighted when we introduced CallKit in iOS 10.

*I mean that literally. I believe this is how Phone.app worked the original "iPhoneOS 1.0", and I KNOW it worked this way in iOS 4... because that's when voip developers first noticed the difference and started asking about it.

Critical alerts then reused it, not because of the higher volume but because it had the interruption semantics critical alerts needed. The higher volume behavior stayed because the difference wasn't "bad" (the alerts are, after all, "critical"), so it wasn't worth extra work to lower the volume.

With ringtones, the answer is even simpler. The point of the API was to ensure that audio played through UNNotificationSound .ringtoneSoundNamed(...) sounded EXACTLY like CXProviderConfiguration.ringtoneSound(), which can only really be done by using exactly the same audio session configuration.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Is this expected behavior on iOS?

Yes.

And is there any way to make non-critical notifications play at the same maximum loudness as critical alerts?

No.

I describe what is happening below, but by design, the audio session configuration that's being used cannot be configured or activated by any application.

As to why...

However, I’ve noticed that non-critical notifications still play quieter than critical alerts under these conditions. Critical alerts with volume: 1.0 sound noticeably louder than standard notifications, even though the Ringtone and Alerts slider is already set to maximum. And I couldn't find any documentation for this behavior anywhere.

I'm not sure we ever documented it formally, but the behavior here has actually been true "forever“. It’s just easy to overlook unless you know what you're looking for. The key clue here is that if you compare the max volume of a standard PlayAndRecord audio session with the maximum volume of a CallKit call, you'll find exactly the same difference in volume.

What's going on here is that from the very beginning*, there has been a private "telephone" AudioSession which is similar to a PlayAndRecord session, but this has higher priority, different interruption rules, and... a slightly higher maximum volume. Note that this volume difference was very well known (and complained about...) to VoIP developers and, in fact, was one of the things highlighted when we introduced CallKit in iOS 10.

*I mean that literally. I believe this is how Phone.app worked the original "iPhoneOS 1.0", and I KNOW it worked this way in iOS 4... because that's when voip developers first noticed the difference and started asking about it.

Critical alerts then reused it, not because of the higher volume but because it had the interruption semantics critical alerts needed. The higher volume behavior stayed because the difference wasn't "bad" (the alerts are, after all, "critical"), so it wasn't worth extra work to lower the volume.

With ringtones, the answer is even simpler. The point of the API was to ensure that audio played through UNNotificationSound .ringtoneSoundNamed(...) sounded EXACTLY like CXProviderConfiguration.ringtoneSound(), which can only really be done by using exactly the same audio session configuration.

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Why are non-critical notifications quieter than critical alerts at max volume?
 
 
Q