I’ve
been using SOUNDPEATS Sonic Pro Bluetooth earbuds for almost two years,
and I like them. By today’s standards, they’re a fairly basic model
featuring no ANC/transparency modes, no equalizer or auto-pause upon
unplugging.
Unfortunately, left earpiece of this otherwise nice and comfy pair started sounding noticeably quieter. While I could adjust the audio balance on my device, Android’s global balance setting means I’d have to reset it to zero every time I connect different earphones.
So, I decided it was time to try something new, and my eyes landed on this season’s latest release from CMF: Buds 2 Plus.
A
brand new model with lots of features! “Personal Sound” tailors the
equalizer curve based on your hearing profile, while “Spatial Audio”
controls binaural panning, and what’s also important, these earbuds have
6 microphones for improved call clarity. That’s exactly what I wanted,
as SOUNDPEATS fall short in this aspect, offering both lower-end
microphone sound quality and poor wind detection.
The CMF Buds 2 Plus sport a 12 mm LCP driver with “enhanced clarity & deep, powerful bass” and are Hi-Res certified. The bass is indeed deep and powerful, too powerful to my taste, even with “Ultra Bass” turned off.
However, within the first couple of minutes of listening, I
encountered unpleasant audio artifacts. Complex tracks sounded
like a regular low-bitrate audio file, with cymbal hits unnaturally
smoothed out (making “sss” sound instead of “tsss”), and bass drums
barely present. On top of that, there’s a distinct metallic echo.
It just didn’t sound right for earbuds in this tier.
After trying different settings, equalizer presets, toggling game
(low lag) mode on and off, I found High-quality audio
menu, which lets users switch between AAC and LDAC codecs.
The application has informed me that LDAC may “reduce battery life and
result in choppy audio”. Switching the codec to LDAC did the
job: the audio was finally great, as it should be from the
beginning!
But why was it poor with AAC? Even more, why it
becomes better with SBC, if I switch to it manually using
developer settings on my smartphone?
For comparison, my previous earbuds didn’t have this issue. Whether
using SBC, AAC (or aptX for that matter), they delivered solid sound
without any obvious artifacts.
Curious about the root cause, I’ve ended up capturing and analyzing
Bluetooth traffic between my Linux PC and the earbuds.
It turns out that:
PipeWire, the audio server of Linux, handles not only regular audio
cards, but everything Bluetooth-related as well.
By tweaking single MIN_AAC_BITRATE
constant in a2dp-codec-aac.c
file, I forced the server to negotiate 320 kbit/s AAC, which CMF Buds 2
Plus happilly accepted despite the imposed limit.
--- a/spa/plugins/bluez5/a2dp-codec-aac.c +++ b/spa/plugins/bluez5/a2dp-codec-aac.c @@ -19,7 +19,7 @@ static struct spa_log *log; #define DEFAULT_AAC_BITRATE 320000 -#define MIN_AAC_BITRATE 64000 +#define MIN_AAC_BITRATE 320000
With this change, the audio quality is great now, without any hiccups
or interrupts from the higher bitrate. Low bitrate wasn’t the
result of hardware limitation of the earbuds, but just a deliberate
configuration profile.
Huh!?
I just bought CMF Buds 2 Plus, connected with my phone and PC, and was presented with audible AAC artifacts right away. After checking the settings in the Bluetooth configuration, in the app, I’ve ended capturing and analyzing Bluetooth traffic on the PC.
It turns out that
* SBC codec is artificially limited to 250 Kbit/s (max bitpool =
39)
* AAC codec is artificially limited to 128 Kbit/s
AAC sounds really bad, SBC is a bit better. Only LDAC is all right at 660 Kbit/s.
The industry standard for SBC max bitpool is 53 (328 kbit/s @ 44100 Hz Joint Stereo) but it could (and really should) be higher, and for AAC it’s usually set to 320 kbit/s.
May I ask you for the reason of such limitations, and could they be addressed in the next firmware update? My Buds are on 1.0.1.36 firmware version (the latest available).
Thank you for contacting CMF by Nothing.
Thank you for your detailed and professional feedback, and we
sincerely apologize for any inconvenience you’ve experienced with the
audio quality of your CMF Buds 2 Plus.
In actual user scenarios, certain limitations are applied to the
encoding formats to help ensure stable performance. These limitations
are mainly in place to enhance resistance to signal interference. If the
bitrate is set too high, performance may degrade in environments with
more interference, which could negatively impact the overall user
experience.
We have conducted extensive laboratory comparisons with other brands and
applied optimized codec limitations based on real-world performance
under various conditions.
Your expertise and input are highly appreciated, and we’ve shared your feedback with our development team for further review. Thank you again for helping us improve.
Unfortunately that doesn’t make sense to me—LDAC uses bitrates not lower than 330 kbit/s, usually 660 kbit/s and higher, while CMF Buds 2 Plus’s AAC codec is capped down to 128 kbit/s with hearable artifacts.
iPhones don’t support LDAC and will use AAC with CMF Buds 2 Plus, with very low audio quality.
This is a major deal breaker for otherwise nice earphones, and this definitely seems like a bug in the firmware.
We understand how important audio quality is to our users, and we are always looking for ways to improve our products. Regarding firmware bugs or possible improvements, we will review your feedback with our technical team to see if there are any enhancements we can make for future updates.
Thank you again for sharing your experience—your input is valuable to us. If you have any other questions or need further assistance, please let us know.
Best regards,
Hannah Grace
CMF Customer Support
Huh. All right.
My forum
post hasn’t been approved in 8 days, despite being visible to the
moderator, from whom I received another reply.
Was it done for pure marketing reason, or is there any technical basis for such configuration?
Could it be about power consumption? Are they trying to target longer battery life with low-quality AAC?
The website shows drastic battery differences between AAC and LDAC:
Is this really the case?
Does AAC 128 kbit/s consume that much less than AAC 320 kbit/s?
Does LDAC consume much more than AAC due to its complexity?
I always thought of LDAC as of low-complexity codec due to its high bitrate, but it’s hard to call AAC-LC (Low Complexity) exactly low complexity codec either.
Well, the only way to find out is to test them
all!
The test was performed with the same volume level, with ANC off but
Personal Sound enabled, on the same music set.
AAC 128k | AAC 256k | AAC 320k | LDAC 48KHz 660k | SBC XQ 463k | SBC 250k |
---|---|---|---|---|---|
13:06 12:33 (2 attempt) |
10:56 | 11:04 | 9:32 | 9:24 | 11:15 |
And indeed!
The reason for these differences remains unclear
Does more data increase pure CPU time? Or is it SRAM which stays in
high power mode longer? Maybe more data does not fit into single DSP
word and forces it to process in more ticks? Could it be the radio,
which power amplifier is enabled longer due to more frequent ACK
packets?
I don’t have the answer.
Thanks to btcodecs project, I have traffic dump data from thousands of devices, allowing me to examine AAC bitrates across various earbuds.
Surprisingly, low bitrate AAC is rather common in the industry:
Manufacturer | Model | Max AAC Bitrate |
---|---|---|
Nothing | Ear (1) | 160 kb/s |
CMF | Buds 2 Buds 2 Plus |
128 kb/s |
OPPO | Enco X Enco Free2 Enco Free3 Enco Air3 |
128 kb/s |
OnePlus | Buds | 165 kb/s |
Buds Pro 2 | 128 kb/s | |
Buds Z2 | 145 kb/s | |
Xiaomi | Mi True Wireless Earphones 1 Mi True Wireless Earphones 2 |
96 kb/s |
Air 2s | 128 kb/s | |
realme | Buds Air 3 Buds Air 3s Buds Air 5 Pro |
128 kb/s |
Huawei | FreeBuds 3i | 128 kb/s |
FreeBuds SE 2 | 192 kb/s | |
Bose | QC35 II QC Earbuds |
192 kb/s |
It all depends on the encoder and its configuration.
Android uses FDK-AAC software encoder from Fraunhofer institute, which:
However, the decoding could be offloaded to the hardware
implementation or Digital Sound Processing (DSP) chip, and it could be,
and usually is, of higher quality.
I don’t have any information regarding the System-On-Chips (SoCs) or
smartphones which incorporate hardware encoding.
Apple uses its own top-quality encoder on iPhone, delivering exceptional sound on low bitrates, but 128 kbit/s is still just barely enough for good audio, even with the best encoder in the industry.
Another major factor? Your age.
As we age, our ability to hear high frequencies declines. Most audio
codecs allocate bitrate across mid-to-low-to-high frequencies, and if
your ears are aged, you might not hear the mess in the highs, where the
artifacts are present the most.
This is especially true for younger audience: 17 KHz cutoff in Android’s FDK-AAC won’t sound perfect even with 320 kbit/s if you have another codec to compare. Again, this may not be true for hardware encoder.
Unfortunately (or, fortunately) my hearing limit is around 15.5 KHz—I
can barely hear old CRT TV scan frequency.
You can test your frequency response on Online Tone
Generator website.
avinfo
Currently, btcodecs
project does not show AAC bitrate.
The website will be updated soon.
If you have Bluetooth traffic dump, you can use
Wireshark to check the bitrate.
Apply btavdtp.media_codec_audio_type==0x02
filter and look
under
Bluetooth AVDTP Protocol → Capabilities → Service: Media Codec - Audio MPEG-2,4 AAC → Bit Rate
in the bottom of the list.
While CMF Buds 2 Plus allow user to switch to LDAC for proper music experience, buyers of regular CMF Buds 2 (non-plus) will be stuck with 128 kbit/s AAC only, and I honestly don’t see any reason other than marketing to be proud of the large and high-quality driver in the earbuds if you can’t use it to its full capability.
If CMF wants to improve user experience, they should introduce a bitrate configuration option in their app, letting users balance between audio quality and battery life themselves.
I’ve got ripped, LAME! (v3.98)