Volume difference between Audio APIs

I have reproduced this issue on a Samsung galaxy device- I am finding a ~5dB difference between OpenSL and AAudio. I have not been able to reproduce this on any other devices though, and I have confirmed we are sending the exact same data to the hardware endpoints in both cases, so the only independent variables after that point are the OS, audio drivers and audio hardware, all of which are outside of our control.
As for some general tips and tricks to suppress peaks; the best way to avoid pops and clicks from high energy sounds is to follow audio engineering best-practices and deal with loudness at the source/asset level. If an audio asset is peaking around -1dB, and you play more than one instance at the same time then you will get clipping. If the audio asset is peaking around -10dB, then you will be able to play more sounds before getting issues and increase perceived loudness due to the larger dynamic range. If you are finding that playing multiple sound sources simultaneously causes clipping then those game sound sources are likely mixed too loud and should be mixed down to a lower volume.
Other tips and tricks for getting more headroom on mobile:

  • If you know the user will be using the phone’s speaker then you can aquire more headroom using a highpass filter, removing low end energy that the user isn’t going to be able to hear anyway, and would otherwise just contribute to clipping.
  • As you have said, using a limiter helps. If you are finding the FMOD Limiter too aggressive then using a fast attack compressor with a high ratio setting will similarly curb peaks in the same way and will introduce less distortion than the FMOD brick-wall limiter.
  • Use 32-bit float wav files- this format inherently has more headroom but are larger in size. Perhaps reserve this format for your loudest sounds, such as explosions, gunshots etc
1 Like