Along with SBC and Qualcomm’s aptX, AAC is one of the most commonly supported Bluetooth codecs in the wireless headphone and speaker markets. It’s also the default audio compression codec used by Apple’s iTunes and YouTube, and is supported across both iPhone and Android smartphones.
Designed as a successor to the MP3, AAC files come in a similar range of quality options. Even the Bluetooth version of the codec is highly flexible, as we’ll see in a moment. The AAC audio format supports audio quality up to 24-bit 96kHz, but in the Bluetooth space we are limited slightly below CD quality at best.
AAC doesn’t match CD-quality output
The graph above is a little bit of a headache to read because the results we obtained for AAC are so varied. We tested AAC with both lossless, and AAC file types—both producing measurably different results. Different smartphones also perform very differently with AAC, which is surprising given that the same phones perform identically with regular SBC Bluetooth.
Before we zoom in on the graphs to highlight these differences more closely, you need to know a few things. Audio frequency is measured logarithmically, and there’s very little content in music above 16kHz. The bulk of what you hear appears well below 10kHz. Human hearing is also limited to somewhere between 10kHz to 20kHz depending on age, so bear that in mind on the following graphs.
Frequency cutoff varies widely from device to device with AAC. None of them approach Hi-Res—as expected—but AAC doesn’t reach frequencies high enough to match CD quality, LDAC or standard Bluetooth’s SBC in any instance. That’s concerning for anyone who prizes audio quality over convenience.
The Huawei P20 Pro performs the worst, with a roll-off occurring at an stunningly-low 14.2kHz—very much still with the range of most people’s hearing. The LG V30 performs marginally better by rolling off at 16kHz, followed by the Samsung Galaxy Note 8 at 17kHz. The iPhone 7 performed by far the best, extending its limit up to 18.9kHz. Although Apple’s phone begins a slower roll-off that has a -3dB point set at about 18kHz.
AAC doesn't reach frequencies high enough to match CD quality or standard Bluetooth's SBC in any instance. That's concerning for anyone who prizes audio quality over convenience.
To test the noise floor, we’re going to look at the best and worse case scenarios for AAC—so the iPhone 7 and Huawei P20 Pro respectively. The Samsung Galaxy Note 8 is included as a mid-point in quality. We’re also playing back lossless content at the moment, to test the Bluetooth codec’s compression rather than be bound by limitations of the file type.
First, this data showcases a great example of the psychoacoustic compression algorithms used by AAC. Note how the noise floor drops between the test spikes: AAC completely discards this data, as there’s nothing to hear.
What we’re interested in, though, is the noise around the bits of audio we want to hear, checking that they aren’t masked or distorted. The iPhone 7’s implementation of AAC does a reasonable job at all frequencies, peaking at -91dB at 1kHz. This falls just shy of 16-bits worth of data. We can see that the noise level around our test tones seems to roughly follow the amplitude. This explains why the noise is higher around the louder 1kHz peak tone, as AAC uses our brain’s tendency to delete soft sounds to hide the noise.
There's a further element of compression or data removal when playing AAC files over AAC Bluetooth.
Poor performance on Android phones is not the codec’s fault
The key finding from all of the tests is that Android smartphones perform much worse than Apple’s iPhone when using the AAC codec. However that’s not surprising: Android simply doesn’t handle AAC well.
The reason for this is due to the way Android handles encoding for some Bluetooth codes. Not only is the encoding quality linked to connection quality but also to Android’s Energy Aware Scheduling (EAS) algorithms. EAS governs how a phone prioritizes CPU clock speeds versus energy efficiency, and Bluetooth encoding can be assigned a priority like any other task. It’s conceivable that even the battery saver function in Android would affect your music quality some.
AAC is... a very processing-heavy codec compared to SBC or aptX.
AAC is the only Bluetooth codec that makes uses of psychoacoustic modeling to transmit data, so it’s a very processing-heavy codec compared to SBC or aptX. Therefore, smartphones that prioritize energy efficiency over performance will encode AAC Bluetooth to a much lower bitrate and quality. For example: the Huawei P20 Pro, famous for its focus on power optimization, produces an AAC result inferior to the Galaxy Note 8 and iPhone 7.
Even our best Android phone in the mix, The Galaxy Note 8, is clearly worse than the iPhone 8 across all frequencies. It offers a reasonably consistent level of noise at around -73dB around all of our test tones, and an impressive background noise of -110dB. At -73dB we’re a long way from CD quality (96dB), but you will hear noise if you crank your tunes.The Huawei P20 Pro’s noise floor is considerably worse than the Note 8, hitting highs of -42dB around our 1kHz tone. This isn’t quite as bad as it looks, but finer details from real music files will end up lost under this noise floor. Definitely nothing close to CD quality here.
Just to showcase the way that AAC compression changes quite substantially depending on the content being played, here’s our square wave test too:
All of the codecs are very quiet down below 1kHz, as there’s no content. However, the noise floor for the iPhone creeps up to just -80dB at 1kHz and reaches -69dB for the Galaxy Note 8. The iPhone 7 19kHz roll-off is also noticeable with the lower final peak. The takeaway is that AAC’s noise shaping is highly content dependent.
Does AAC Bluetooth pass AAC lossless files untouched?
It’s not unreasonable to assume that AAC Bluetooth passes AAC audio files over the air untouched, especially given the shared names. However, there’s never been any conclusive testing done to prove this, so we converted our lossless test files to AAC and re-ran the tests.
The frequency responses are identical for each phone whether playing lossless or AAC file types. We can also clearly see that none of the phones reach the same 20kHz limit as our AAC input file type. Even Apple’s iPhone doesn’t pass through AAC files untouched. The out-of-band noise floors are also clearly differently shaped in each instance, and none reach as low as our test file.
It’s a similar situation with the noise floor: Apple’s AAC implementation remains closest to the source material, but even here we can see some an extra -15dB or more of noise added to the signal. The Samsung Galaxy Note 8 and Huawei P20 Pro perform much the same as before—and are clearly worse than the iPhone 7 again. Even so, all of these phones re-pass an AAC source file back through the encoder, degrading quality. Just like with lossless files, the difference lies in how much additional compression is applied to the files on this second pass.
AAC isn’t perfect
AAC is one of the more intriguing Bluetooth codecs to analyze, owing to its psychoacoustic rather frequency band quantization. This makes judging its quality a little tougher, as we have to take into consideration auditory masking rather than the consistent noise floor that we see with other codecs, CD, and Hi-Res files.
With that mind, AAC punches above its raw numbers in terms of file size, much like the MP3 does. High-quality implementations, like that from the iPhone 7, are going to be very hard to distinguish from CD quality and other high-quality Bluetooth codecs. However, lower bitrate implementations like those seen on some of our Android phones are nowhere near CD quality in terms of frequency response or noise. Avoid using AAC on these models.
Android phones are nowhere near CD quality in terms of frequency response or noise. Avoid using AAC on these models.
The biggest concern with AAC is its hugely variable performance between smartphones. Even Bluetooth’s default SBC didn’t see anything approaching this variety between phones I’ve tested. If you’re an Android user, you’re probably better off sticking with SBC, or opting for aptX or LDAC if available.