Is Unity's audio system actually FMOD Core?

I posted today in the Game Audio Denizens facebook group today about how Unity is chopping off everything in our iOS game from around 11.5 kHz and up (the post is right at the top if anyone wants to read the full details).

Below shows reference iOS games getting a full spectrum through about 18 kHz (left), and my games in the past as well as our current game all getting cut sharply at 11.5 kHz (right):

We’re using Unity’s built-in audio system—not FMOD. But someone in the FB group chimed in mentioning that it’s probably because FMOD Core defaults to 24kHz for iOS, and that “Unity uses FMOD Core”. They also referenced this image from somewhere in the Core API reference (I can’t find it):

First off, is this true that the default Unity system is actual FMOD Core?

Second, is it true that iOS defaults to 24 kHz? Why? There’s so much loss there! And if this really is an FMOD Core issue, what do we need to do to salvage the top end of our audio? I am not a programmer—I’m the composer/sound designer, but it appears that we need to just alter that second line from “24000” to “44100”, and set System::setSoftwareFormat ‘samplerate’ as well?

If this is not actually an FMOD Core issue and Unity in fact does not use FMOD Core by default, please excuse my ignorance!

Yes, the internal audio engine for Unity is FMOD, specifically FMOD 4 and just the low level API (as it was known back then).

It’s very likely what you are seeing is the default sample rate of the system running at 24KHz. This decision dates back a long way but was done for two reasons, 1) performance, half the samples, half the cost and 2) lower quality speakers. Since those days mobile devices have become much more powerful and speaker quality has improved yet the old default still stands.

This should be a simple setting within Unity to correct, I’m no expert but there should be a UI somewhere that ends up calling System::setSoftwareFormat to configure the system sample rate before the audio engine is initialized.

EDIT: Quick edit, looks like you need this setting.

1 Like

Thanks for the help! Yes, this sample rate chopping has been a long standing one for me—all those games on the right date from current back to around 2017, all on iOS.

So to be clear, is the FMOD 4 low-level API (which was integrated into Unity a long time ago) different than its modern iteration of FMOD Core? I am assuming that Unity doesn’t just update their audio system each time you update Core, or do they?

I ask because I wonder if this is a good time to rethink the default here for iOS—as you mentioned, it’s an old default, and tech has improved. I’m currently working on an Apple Arcade game which will be playable on iPhone and iPad, as well as Apple TV (and I think eventually on a Mac desktop). I know that TV OS is separate from iOS but I wonder if Unity even distinguishes between the platforms. The last thing I want is people listening to 24kHz audio on their home theater systems. But even mobile devices, as you mentioned, have better speakers now and people often play mobile games with headphones. Even users of cheap earbuds will pick up on the loss of that 11.5+ kHz range.

The Core API in its current form is technically FMOD 5, FMOD 4 hasn’t been updated in about 5 years. So no, Unity haven’t been taking updates but it’s assumed they are maintaining the codebase since they have source access and have ported to several platforms now.

The default of 24KHz is still present in our latest code, it’s trivial for the user to change so we’ve not really considered it. Even if we do, this will not affect Unity as they are locked and I believe their plan is to ultimately replace FMOD with their own system rather than update.