Skip to content

Instantly share code, notes, and snippets.

@dvf
Last active March 24, 2024 19:04
Star You must be signed in to star a gist
Save dvf/3771e58085568559c429d05ccc339219 to your computer and use it in GitHub Desktop.
Enable High Quality mode on your headphones (Updated for macOS Catalina)

If you're using a high-end bluetooth headset on your Macbook Pro it's likely your mac is using an audio codec which favors battery efficiency over high quality. This results in a drastic degradation of sound, the SBC codec is the likely culprit, read more about it here.

Find out what codec you're using

  1. Play a song on your headphones
  2. Option (⌥) click the Bluetooth button at the top of your screen Inspect the Bluetooth Coded
  3. If you're using AAC or aptX, you can stop here—those are the highest quality codecs.

Change your codec to AAC or aptX

UPDATE: It looks like Apple has silently dropped support for aptX, leaving only AAC

You'll need to download Apple's Bluetooth Explorer in order to change codecs.

  1. Head over to Apple's Developer Downloads

  2. Search for additional tools and download Additional Tools for XCode 11.dmg Search for "additional tools"

  3. Open the dmg, and open Bluetooth Explorer Open Bluetooth Explorer

  4. Click on Tools > Audio Options and change your audio codec to the following settings:

    • Enable AAC
    • Force use of aptX
    Change your audio codec
  5. Disconnect your Bluetooth headset, reconnect it, and while some music is playing, inspect your codec. It should now show either AAC or aptX.

    Your codec should now show AAC/aptX

Squeezing the most out of AAC

You can increase the AAC bitrate in Audio Options but be sure to keep an eye on the graphs. The retransmission percentage is roughly equivalent to packet loss, and if you increase the bitrate too high your audio will start cutting out:

The retransmission rate is a function of distance and interference, and you'll need to disconnect/reconnect on each attempt before you find the sweet spot.

@eengl
Copy link

eengl commented May 17, 2022

@dvf Thank you for providing this. I have an iMac Pro running macOS Monterey (12.4) and use Sennheiser PXC 550. Following the various instructions above, I am only getting SBC codec. Here is my console info from when the headphones are paired.

A2DP configured at 44.1 KHz. Codec: SBC, Bitpool: 53 (327 kbps). 7 frames * 119 bytes = 833 per RTP (max=879) every 20.32 ms

The audio quality was poor until I went into Preferences -> Sound -> Sound Effects and set "Play sounds effects through:" to "iMac Pro Speakers" instead of the headphones. Since then, the audio quality is significantly improved.

I also get this error message in Console when the headphones connect:

Length of AVDTP Codec Info is too short for Apple Vendor-Specific Codec

I wonder if this is a Sennheiser issue, not Apple.

@eEQK
Copy link

eEQK commented Jun 10, 2022

My wh-1000xm3 kept using SBC but after connecting them to an iPhone with Sony Headphones Connect app and going through the setup now they use AAC on my Monterey MacBook. I did it a while back with an Android but that didn't help, looks like you have to use an iPhone

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 256 kbps. 1 frames * (12+744) bytes = 756 per RTP (max=879) every 23.22 ms

@umanghome
Copy link

Confirming that @eEQK's method works for me on Android (Galaxy S21, Android 12, Sony Headphones Connect v9.0.1) and WH-1000XM3 (XM3 that go over the ears).

Steps:

  1. Connect the headphones to MacBook
  2. Follow this comment and verify that the codec is SBC
  3. Disconnect XM3 from MacBook
  4. Connect XM3 to Android
  5. Open the Sony Headphones Connect app
  6. Navigate to "Sound" and scroll down until you see "Sound Quality Mode"
  7. Update the "Sound Quality Mode" setting to "Priority on Sound Quality"
  8. Let the headphones reconnect to Android
  9. Disconnect from Android
  10. Connect to MacBook
  11. Follow this comment and verify that the codec is AAC-LC

@825i
Copy link

825i commented Jul 1, 2022

Bluetooth Explorer doesn't seem to work on my M1 Macbook 16" at all. Any other options?

Bluetooth Explorer just cannot detect or identify anything about my devices. I am trying to basically find the best use of AAC on my iFi Zen v2.

EDIT: I guess it's because of Monterey?

EDIT2: Running bluetoothd just instantly killed my Mac. It rebooted with:

panic(cpu 1 caller 0xfffffe0025e3c184): A kext releasing a(n) IOMemoryMap has corrupted the registry. @OSObject.cpp:224
Debugger message: panic
Memory ID: 0x1
OS release type: User
OS version: 21F79
Kernel version: Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:37 PDT 2022; root:xnu-8020.121.3~4/RELEASE_ARM64_T6000
Fileset Kernelcache UUID: 77B58D4501F17D9FA036CFE982C6B773
Kernel UUID: C44613B0-01A6-3609-A18D-29AC6CE3DAAF
iBoot version: iBoot-7459.121.3
secure boot?: YES
Paniclog version: 13
KernelCache slide: 0x000000001decc000
KernelCache base:  0xfffffe0024ed0000
Kernel slide:      0x000000001e688000
Kernel text base:  0xfffffe002568c000
Kernel text exec slide: 0x000000001e770000
Kernel text exec base:  0xfffffe0025774000
mach_absolute_time: 0x631833ae9f
Epoch Time:        sec       usec
  Boot    : 0x62beafd4 0x000d79d2
  Sleep   : 0x62bee9d9 0x000b48f5
  Wake    : 0x62beecf9 0x000e3076
  Calendar: 0x62beff77 0x000aa81b

Zone info:
  Zone map: 0xfffffe1000178000 - 0xfffffe3000178000
  . VM    : 0xfffffe1000178000 - 0xfffffe14cce44000
  . RO    : 0xfffffe14cce44000 - 0xfffffe16667dc000
  . GEN0  : 0xfffffe16667dc000 - 0xfffffe1b334a8000
  . GEN1  : 0xfffffe1b334a8000 - 0xfffffe2000174000
  . GEN2  : 0xfffffe2000174000 - 0xfffffe24cce40000
  . GEN3  : 0xfffffe24cce40000 - 0xfffffe2999b0c000
  . DATA  : 0xfffffe2999b0c000 - 0xfffffe3000178000
  Metadata: 0xfffffe7522b2c000 - 0xfffffe752ab2c000
  Bitmaps : 0xfffffe752ab2c000 - 0xfffffe753068c000

CORE 0 PVH locks held: None
CORE 1 PVH locks held: None
CORE 2 PVH locks held: None
CORE 3 PVH locks held: None
CORE 4 PVH locks held: None
CORE 5 PVH locks held: None
CORE 6 PVH locks held: None
CORE 7 PVH locks held: None
CORE 8 PVH locks held: None
CORE 9 PVH locks held: None
CORE 0: PC=0x000000019e4f75d0, LR=0x0000000101004aa8, FP=0x000000016ef165f0
CORE 1 is the one that panicked. Check the full backtrace for details.
CORE 2: PC=0xfffffe0025802b14, LR=0xfffffe0025802b10, FP=0xfffffe7538bdbf00
CORE 3: PC=0xfffffe0025802b10, LR=0xfffffe0025802b10, FP=0xfffffe7536bcbf00
CORE 4: PC=0x00000001937c7560, LR=0x00000001937c7284, FP=0x000000016f1515e0
CORE 5: PC=0x00000001937c4d68, LR=0x00000001937c45d0, FP=0x000000016d2513a0
CORE 6: PC=0xfffffe0025802b10, LR=0xfffffe0025802b10, FP=0xfffffe753a04bf00
CORE 7: PC=0xfffffe0025802b14, LR=0xfffffe0025802b10, FP=0xfffffe7538a1bf00
CORE 8: PC=0xfffffe0025802b10, LR=0xfffffe0025802b10, FP=0xfffffe753956bf00
CORE 9: PC=0xfffffe0025802b10, LR=0xfffffe0025802b10, FP=0xfffffe7539c9bf00
Compressor Info: 3% of compressed pages limit (OK) and 4% of segments limit (OK) with 0 swapfiles and OK swap space
Panicked task 0xfffffe1ff4150cf0: 1848 pages, 3 threads: pid 22193: bluetoothd
Panicked thread: 0xfffffe2998351040, backtrace: 0xfffffe753a39b360, tid: 186847
		  lr: 0xfffffe00257cd124  fp: 0xfffffe753a39b3d0
		  lr: 0xfffffe00257ccdec  fp: 0xfffffe753a39b440
		  lr: 0xfffffe0025911f2c  fp: 0xfffffe753a39b460
		  lr: 0xfffffe0025903d00  fp: 0xfffffe753a39b4d0
		  lr: 0xfffffe00259019ac  fp: 0xfffffe753a39b590
		  lr: 0xfffffe002577b7f8  fp: 0xfffffe753a39b5a0
		  lr: 0xfffffe00257cca70  fp: 0xfffffe753a39b940
		  lr: 0xfffffe00257cca70  fp: 0xfffffe753a39b9b0
		  lr: 0xfffffe0025ff3120  fp: 0xfffffe753a39b9d0
		  lr: 0xfffffe0025e3c184  fp: 0xfffffe753a39ba00
		  lr: 0xfffffe0025f18014  fp: 0xfffffe753a39ba40
		  lr: 0xfffffe0025e3defc  fp: 0xfffffe753a39ba80
		  lr: 0xfffffe0025e3e30c  fp: 0xfffffe753a39bac0
		  lr: 0xfffffe0025e766cc  fp: 0xfffffe753a39baf0
		  lr: 0xfffffe00258ce088  fp: 0xfffffe753a39bb30
		  lr: 0xfffffe00257d46c8  fp: 0xfffffe753a39bb70
		  lr: 0xfffffe00257b4bf4  fp: 0xfffffe753a39bc00
		  lr: 0xfffffe00257b8dfc  fp: 0xfffffe753a39bcd0
		  lr: 0xfffffe002580b35c  fp: 0xfffffe753a39bd10
		  lr: 0xfffffe0025d0722c  fp: 0xfffffe753a39bda0
		  lr: 0xfffffe0025d07038  fp: 0xfffffe753a39bdb0
		  lr: 0xfffffe0025e340a0  fp: 0xfffffe753a39be50
		  lr: 0xfffffe0025901a80  fp: 0xfffffe753a39bf10
		  lr: 0xfffffe002577b7f8  fp: 0xfffffe753a39bf20

last started kext at 1759729849: com.apple.driver.driverkit.serial	6.0.0 (addr 0xfffffe0025564650, size 3416)
loaded kexts:
com.apple.filesystems.autofs	3.0
com.apple.UVCService	1
com.apple.driver.AppleTopCaseHIDEventDriver	5450.8
com.apple.driver.AppleBiometricServices	1
com.apple.driver.CoreKDL	1
com.apple.driver.SEPHibernation	1
com.apple.driver.BCMWLANFirmware4387.Hashstore	1
com.apple.driver.DiskImages.ReadWriteDiskImage	493.0.0
com.apple.driver.DiskImages.UDIFDiskImage	493.0.0
com.apple.driver.DiskImages.RAMBackingStore	493.0.0
com.apple.driver.DiskImages.FileBackingStore	493.0.0
com.apple.driver.AppleUSBDeviceNCM	5.0.0
com.apple.driver.AppleThunderboltIP	4.0.3
com.apple.driver.AppleFileSystemDriver	3.0.1
com.apple.nke.l2tp	1.9
com.apple.filesystems.tmpfs	1
com.apple.filesystems.lifs	1
com.apple.filesystems.apfs	1934.121.2
com.apple.IOTextEncryptionFamily	1.0.0
com.apple.filesystems.hfs.kext	583.100.10
com.apple.security.BootPolicy	1
com.apple.BootCache	40
com.apple.AppleFSCompression.AppleFSCompressionTypeZlib	1.0.0
com.apple.AppleFSCompression.AppleFSCompressionTypeDataless	1.0.0d1
com.apple.driver.AppleCS42L84Audio	550.3
com.apple.driver.ApplePMP	1
com.apple.AppleEmbeddedSimpleSPINORFlasher	1
com.apple.driver.AppleSmartIO2	1
com.apple.driver.AppleSN012776Amp	550.3
com.apple.driver.AppleT6000SOCTuner	1
com.apple.driver.AppleT6000CLPCv3	1
com.apple.driver.AppleSmartBatteryManager	161.0.0
com.apple.driver.AppleALSColorSensor	1.0.0d1
com.apple.driver.AppleAOPVoiceTrigger	140.1
com.apple.driver.ApplePMPFirmware	1
com.apple.driver.AppleDPDisplayTCON	1
com.apple.driver.AppleS8000AES	1
com.apple.driver.AppleT6000PMGR	1
com.apple.driver.AppleEventLogHandler	1
com.apple.driver.AppleM68Buttons	1.0.0d1
com.apple.driver.AppleS5L8960XNCO	1
com.apple.driver.AppleSDXC	3.2.1
com.apple.driver.AppleAVE2	550.16.0
com.apple.driver.AppleAVD	564
com.apple.AGXG13X	190.20
com.apple.driver.AppleJPEGDriver	4.8.1
com.apple.driver.AppleProResHW	176.6.0
com.apple.driver.AppleMobileDispT600X-DCP	140.0
com.apple.driver.AppleSPMIPMU	1.0.1
com.apple.driver.usb.AppleSynopsysUSB40XHCI	1
com.apple.driver.AppleMCDP29XXUpdateSupport	1
com.apple.driver.AppleSamsungSerial	1.0.0d1
com.apple.driver.AppleSerialShim	1
com.apple.driver.AppleS8000DWI	1.0.0d1
com.apple.driver.AppleInterruptControllerV2	1.0.0d1
com.apple.driver.AppleT8110DART	1
com.apple.driver.AppleBluetoothModule	1
com.apple.driver.AppleBCMWLANBusInterfacePCIe	1
com.apple.driver.AppleS5L8920XPWM	1.0.0d1
com.apple.driver.AudioDMAController-T600x	150.1
com.apple.driver.AppleT6000DART	1
com.apple.driver.AppleSPIMC	1
com.apple.driver.AppleS5L8940XI2C	1.0.0d2
com.apple.driver.AppleT6000	1
com.apple.iokit.IOUserEthernet	1.0.1
com.apple.driver.usb.AppleUSBUserHCI	1
com.apple.iokit.IOKitRegistryCompatibility	1
com.apple.iokit.EndpointSecurity	1
com.apple.driver.AppleDiskImages2	126.100.13
com.apple.AppleSystemPolicy	2.0.0
com.apple.nke.applicationfirewall	402
com.apple.kec.InvalidateHmac	1
com.apple.kec.AppleEncryptedArchive	1
com.apple.driver.driverkit.serial	6.0.0
com.apple.kext.triggers	1.0
com.apple.iokit.IOAVBFamily	1040.6
com.apple.plugin.IOgPTPPlugin	1040.3
com.apple.iokit.IOEthernetAVBController	1.1.0
com.apple.driver.AppleHIDKeyboard	228.2
com.apple.driver.AppleActuatorDriver	5450.14
com.apple.driver.AppleMultitouchDriver	5450.14
com.apple.driver.AppleHSBluetoothDriver	5450.8
com.apple.driver.IOBluetoothHIDDriver	9.0.0
com.apple.driver.AppleMesaSEPDriver	100.99
com.apple.iokit.IOBiometricFamily	1
com.apple.driver.usb.IOUSBHostHIDDevice	1.2
com.apple.driver.usb.cdc	5.0.0
com.apple.driver.AppleUSBAudio	416.2
com.apple.iokit.IOAudioFamily	340.2
com.apple.vecLib.kext	1.2.0
com.apple.driver.AppleTrustedAccessory	1
com.apple.iokit.AppleSEPGenericTransfer	1
com.apple.driver.AppleSEPHDCPManager	1.0.1
com.apple.driver.DiskImages.KernelBacked	493.0.0
com.apple.driver.AppleXsanScheme	3
com.apple.driver.usb.networking	5.0.0
com.apple.driver.AppleThunderboltUSBDownAdapter	1.0.4
com.apple.driver.AppleThunderboltPCIDownAdapter	4.1.1
com.apple.driver.AppleThunderboltDPInAdapter	8.5.1
com.apple.driver.AppleThunderboltDPAdapterFamily	8.5.1
com.apple.nke.ppp	1.9
com.apple.driver.AppleConvergedIPCOLYBTControl	1
com.apple.driver.AppleConvergedPCI	1
com.apple.driver.AppleBluetoothDebug	1
com.apple.driver.AppleHIDTransportSPI	5450.4
com.apple.driver.AppleHIDTransport	5450.4
com.apple.driver.AppleInputDeviceSupport	5450.4
com.apple.driver.AppleBSDKextStarter	3
com.apple.filesystems.hfs.encodings.kext	1
com.apple.driver.AppleBTM	1.0.1
com.apple.driver.AppleCSEmbeddedAudio	550.3
com.apple.driver.AppleDCPDPTXProxy	1.0.0
com.apple.driver.DCPDPFamilyProxy	1
com.apple.driver.AppleDiagnosticDataAccessReadOnly	1.0.0
com.apple.driver.ApplePassthroughPPM	3.0
com.apple.driver.AppleAOPAudio	150.2
com.apple.driver.AppleEmbeddedAudio	550.3
com.apple.iokit.AppleARMIISAudio	140.2
com.apple.AGXFirmwareKextG13XRTBuddy	190.20
com.apple.AGXFirmwareKextRTBuddy64	190.20
com.apple.driver.AppleSPU	1
com.apple.iokit.IONVMeFamily	2.1.0
com.apple.driver.AppleNANDConfigAccess	1.0.0
com.apple.driver.AppleStockholmControl	1.0.0
com.apple.driver.ApplePMGR	1
com.apple.driver.AppleSART	1
com.apple.iokit.IOGPUFamily	35.29
com.apple.driver.usb.AppleUSBHostPacketFilter	1.0
com.apple.driver.DCPAVFamilyProxy	1
com.apple.iokit.IOMobileGraphicsFamily-DCP	343.0.0
com.apple.driver.AppleDCP	1
com.apple.driver.AppleFirmwareKit	1
com.apple.iokit.IOMobileGraphicsFamily	343.0.0
com.apple.driver.AppleDialogPMU	1.0.1
com.apple.driver.AppleSPMI	1.0.1
com.apple.driver.AppleUSBXDCIARM	1.0
com.apple.driver.AppleUSBXDCI	1.0
com.apple.iokit.IOUSBDeviceFamily	2.0.0
com.apple.driver.usb.AppleSynopsysUSBXHCI	1
com.apple.driver.usb.AppleUSBXHCI	1.2
com.apple.driver.AppleEmbeddedUSBHost	1
com.apple.driver.usb.AppleUSBHub	1.2
com.apple.driver.usb.AppleUSBHostCompositeDevice	1.2
com.apple.driver.AppleT6000TypeCPhy	1
com.apple.driver.AppleT8103TypeCPhy	1
com.apple.driver.AppleHPM	3.4.4
com.apple.driver.AppleARMWatchdogTimer	1
com.apple.driver.AppleDisplayCrossbar	1.0.0
com.apple.iokit.IODisplayPortFamily	1.0.0
com.apple.driver.AppleTypeCPhy	1
com.apple.driver.AppleThunderboltNHI	7.2.81
com.apple.driver.AppleT6000PCIeC	1
com.apple.iokit.IOThunderboltFamily	9.3.3
com.apple.driver.ApplePIODMA	1
com.apple.driver.AppleT600xPCIe	1
com.apple.driver.AppleMultiFunctionManager	1
com.apple.driver.AppleBluetoothDebugService	1
com.apple.driver.AppleBCMWLANCore	1.0.0
com.apple.iokit.IO80211Family	1200.12.2b2
com.apple.driver.IOImageLoader	1.0.0
com.apple.driver.AppleOLYHAL	1
com.apple.driver.corecapture	1.0.4
com.apple.driver.AppleEmbeddedPCIE	1
com.apple.driver.AppleMCA2-T600x	640.5
com.apple.driver.AppleEmbeddedAudioLibs	140.1
com.apple.driver.AppleFirmwareUpdateKext	1
com.apple.driver.AppleH13CameraInterface	6.51.1
com.apple.driver.AppleH10PearlCameraInterface	17.0.6
com.apple.driver.AppleGPIOICController	1.0.2
com.apple.driver.AppleFireStormErrorHandler	1
com.apple.driver.AppleMobileApNonce	1
com.apple.iokit.IOTimeSyncFamily	1040.3
com.apple.driver.DiskImages	493.0.0
com.apple.iokit.IOGraphicsFamily	597
com.apple.iokit.IOBluetoothSerialManager	9.0.0
com.apple.iokit.IOBluetoothHostControllerUSBTransport	9.0.0
com.apple.iokit.IOBluetoothHostControllerUARTTransport	9.0.0
com.apple.iokit.IOBluetoothHostControllerTransport	9.0.0
com.apple.driver.IOBluetoothHostControllerPCIeTransport	9.0.0
com.apple.iokit.IOBluetoothFamily	9.0.0
com.apple.driver.FairPlayIOKit	68.16.0
com.apple.iokit.CSRBluetoothHostControllerUSBTransport	9.0.0
com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport	9.0.0
com.apple.driver.AppleSSE	1.0
com.apple.driver.AppleSEPKeyStore	2
com.apple.driver.AppleUSBTDM	533.120.2
com.apple.iokit.IOUSBMassStorageDriver	210.120.3
com.apple.iokit.IOPCIFamily	2.9
com.apple.iokit.IOSCSIBlockCommandsDevice	456.121.3
com.apple.iokit.IOSCSIArchitectureModelFamily	456.121.3
com.apple.driver.AppleIPAppender	1.0
com.apple.driver.AppleFDEKeyStore	28.30
com.apple.driver.AppleEffaceableStorage	1.0
com.apple.driver.AppleCredentialManager	1.0
com.apple.driver.KernelRelayHost	1
com.apple.iokit.IOUSBHostFamily	1.2
com.apple.driver.AppleUSBHostMergeProperties	1.2
com.apple.driver.usb.AppleUSBCommon	1.0
com.apple.driver.AppleSMC	3.1.9
com.apple.driver.RTBuddy	1.0.0
com.apple.driver.AppleEmbeddedTempSensor	1.0.0
com.apple.driver.AppleARMPMU	1.0
com.apple.iokit.IOAccessoryManager	1.0.0
com.apple.driver.AppleOnboardSerial	1.0
com.apple.iokit.IOSkywalkFamily	1.0
com.apple.driver.mDNSOffloadUserClient	1.0.1b8
com.apple.iokit.IONetworkingFamily	3.4
com.apple.iokit.IOSerialFamily	11
com.apple.driver.AppleSEPManager	1.0.1
com.apple.driver.AppleA7IOP	1.0.2
com.apple.driver.IOSlaveProcessor	1
com.apple.driver.AppleBiometricSensor	2
com.apple.iokit.IOHIDFamily	2.0.0
com.apple.iokit.CoreAnalyticsFamily	1
com.apple.driver.AppleANELoadBalancer	5.65.2
com.apple.driver.AppleH11ANEInterface	5.65.2
com.apple.AUC	1.0
com.apple.iokit.IOAVFamily	1.0.0
com.apple.iokit.IOHDCPFamily	1.0.0
com.apple.iokit.IOCECFamily	1
com.apple.iokit.IOAudio2Family	1.0
com.apple.driver.AppleIISController	140.1
com.apple.driver.AppleAudioClockLibs	140.1
com.apple.driver.AppleM2ScalerCSCDriver	265.0.0
com.apple.iokit.IOSurface	302.14
com.apple.driver.IODARTFamily	1
com.apple.security.quarantine	4
com.apple.security.sandbox	300.0
com.apple.kext.AppleMatch	1.0.0d1
com.apple.driver.AppleMobileFileIntegrity	1.0.5
com.apple.security.AppleImage4	4.2.0
com.apple.kext.CoreTrust	1
com.apple.iokit.IOCryptoAcceleratorFamily	1.0.1
com.apple.driver.AppleARMPlatform	1.0.2
com.apple.iokit.IOStorageFamily	2.1
com.apple.iokit.IOSlowAdaptiveClockingFamily	1.0.0
com.apple.iokit.IOReportFamily	47
com.apple.kec.pthread	1
com.apple.kec.Libm	1
com.apple.kec.corecrypto	12.0



** Stackshot Succeeded ** Bytes Traced 490594 (Uncompressed 1226416) **

@joe-brail
Copy link

Has anyone found a solution to this issue? AptX up and running on Monterey?

@naruto-chelsea
Copy link

SInce updating to Monterey, my beats studio buds stuttering so much and have found no solution for it

@naruto-chelsea
Copy link

I need some help with my Beats studio buds on macbook pro, they stutter way too much when connected. Please somebody help me with this. I'm on macos Monterey 12.5

@justin-caldicott
Copy link

This is a real pita. I recently got some AKG N60 headphones for both music & video calls as they support AptX LL. It seems I need to use a separate USB Bluetooth receiver for them to keep the latency down.

@m0rg5
Copy link

m0rg5 commented Oct 19, 2022

I just got a Macbook air m1 (1st mac in 20yrs) and noticing the degraded quality of my Edifier TWS1 Pro's (Aptx + AAC) is what brought me here. I've tried everything I've found (details at top are deprecated in 12.6), and seen no codec change from SBC.

I just tried toothfairy that has an option - preferences/advanced/
"improve sound quality by disabling audio input from device".

This did indeed stop the mic-input defaulting to headphones on reconnect, but this made no change to the codec.

Monterey 12.6

@m0rg5
Copy link

m0rg5 commented Oct 19, 2022

Has anyone found a solution to this issue? AptX up and running on Monterey?

AptX officially removed from Monterey, but AAC supposedly remains yet I've read that a lot (most?) people with non-Apple bluetooth devices are not able to get AAC working. Looks suspiciously like it might be by design.

@liujunhui2
Copy link

Just for reference, I'm on MacOS Monterrey on an M1 Max, I've never altered the bluetoothaudiod defaults value, and I get this in my console logs when connecting my Bose QC 35's:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 221 kbps. 1 frames * (12+644) bytes = 656 per RTP (max=656) every 23.22 ms

Have you tried to turn the mic on? You can have a one person meeting or test your mic in the settings. The codec falls back to mSBC and results in a very bad sound quality.

@m0rg5
Copy link

m0rg5 commented Oct 21, 2022

I haven't ever turned-the-mic-on (it's on by default), I don't need a Mic and happy to leave off to get better audio.
From what I've read, I've assumed this is the issue, yet have tried and failed to disable mic (can only mute it).

This is my first macbook in 20 yrs.

Presuming you're advising I disable the mic - any tips?

@madzul
Copy link

madzul commented Oct 26, 2022

FYI
my Redmi Buds 3 pro working smoothly on my MBA 2018 (Monterey 12.5)
A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 221 kbps. 1 frames * (12+644) bytes = 656 per RTP (max=656) every 23.22 ms

@jonahpearl
Copy link

jonahpearl commented Dec 19, 2022

Any thoughts on how to do this on an iPhone? My iPhone 11 (!!) has decided to only use SBC, I think, and it's truly a painful difference. I have some Bose 700 HPs. I noticed because bluetooth audio sounds much better through my laptop, which, indeed, is using AAC.

Link explaining how to use the Console to see the iphone bluetooth codec: https://www.head-fi.org/threads/howto-find-which-codec-is-used-between-ios-device-and-bluetooth-headphones.835289/

Selected output lines from connecting my headphones to my iphone:

Bad48KHzCodecs: Disabling 48 KHz - Device is NOT in 48 KHz AAC allowlist
Creating HFPAudioDevice for device 78:2B:64:D2:C3:B8 with codec: mSBC
Audio Codec ID SBC for remote SEID 1

However it does then go on to say

Selected preferred codec AVDTP_CODEC_MPEG_AAC (0x2) out of 7 available endpoints
A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 192 kbps. 1 frames * (12+558) bytes = 570 per RTP (max=879) every 23.22 ms

so I wonder if somehow the fact that the phone is viewing it as a "hands-free profile" (HFP) first is somehow overriding the AAC codec that it then tries to set up. Reminds of issues of listening to music and then opening Zoom -- the Zoom audio takes over and suddenly everything sounds terrible.

EDIT: never mind, the audio was on "mono" and that was ruining the quality. But weird that it was sometimes connecting with mSBC 🤷‍♂️

@dseddah
Copy link

dseddah commented Jan 23, 2023

Hi everyone,
I fixed this by using toothfairy (a small utility on the store but a bit expensive). It has an option to maintain the sound quality.

@joesatriani10
Copy link

I tried toothfairy as well for Sennheiser Momentum 4, I just uninstalled after 5 minutes and waiting for my refund cause it didnt do any improvement and just crash my MBP M1 Pro with fresh MacOS Ventura.

@dseddah
Copy link

dseddah commented Jan 25, 2023

I'm sorry for you it didn't work. I'm on monterey, don't know if it plays a role.

Copy link

ghost commented Feb 7, 2023

I tested this on my Noble Mystique and Sony 1000xm4 and I'm not sure why the Sony gets shafted here. I know the Mystique uses AptX and 1000xm4 uses LDAC, but it doesn't matter here anyways.

Noble Mystique:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 256 kbps. 1 frames * (12+744) bytes = 756 per RTP (max=879) every 23.22 ms

ACMP4AACBaseEncoder.cpp:650   (0x125244440) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 1, bitrate = 128000, quality (complexity) = 64, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 0 (bits), packetBitSizeMin = 0 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

ACMP4AACBaseEncoder.cpp:650   (0x125244440) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 3, bitrate = 192000, quality (complexity) = 32, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 5952 (bits), packetBitSizeMin = 256 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

Sony 1000xm4:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 192 kbps. 1 frames * (12+558) bytes = 570 per RTP (max=656) every 23.22 ms

ACMP4AACBaseEncoder.cpp:650   (0x124b34e40) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 1, bitrate = 128000, quality (complexity) = 64, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 0 (bits), packetBitSizeMin = 0 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

ACMP4AACBaseEncoder.cpp:650   (0x124b34e40) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 3, bitrate = 144000, quality (complexity) = 32, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 4464 (bits), packetBitSizeMin = 256 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

@LetrixZ
Copy link

LetrixZ commented Mar 13, 2023

I'm on Ventura. I wanted to know if it's possible to disable the mic on the bluetooth headphones. The option in Bluetooth Explorer does nothing.

@i3p9
Copy link

i3p9 commented Mar 13, 2023

@LetrixZ since it's not directly related, i would suggest using something like https://github.com/deweller/switchaudio-osx to programmatically switch to a output device other than your bt headphones, this doesn't outright disables the microphone but switching to output device that's not your bt headphones should switch to a better codec.

@plancha2002
Copy link

Confirming that @eEQK's method works for me on Android (Galaxy S21, Android 12, Sony Headphones Connect v9.0.1) and WH-1000XM3 (XM3 that go over the ears).

Steps:

  1. Connect the headphones to MacBook
  2. Follow this comment and verify that the codec is SBC
  3. Disconnect XM3 from MacBook
  4. Connect XM3 to Android
  5. Open the Sony Headphones Connect app
  6. Navigate to "Sound" and scroll down until you see "Sound Quality Mode"
  7. Update the "Sound Quality Mode" setting to "Priority on Sound Quality"
  8. Let the headphones reconnect to Android
  9. Disconnect from Android
  10. Connect to MacBook
  11. Follow this comment and verify that the codec is AAC-LC

thanks

@cansozbir
Copy link

After using my soundcore life q10 with my macbook pro m1 pro for a few hours, I see this in the console:

Bad48KHzCodecs: Disabling 48 KHz - Device is NOT in 48 KHz AAC allowlist. The log repeats itself, and the sound starts interrupting.

Screenshot 2023-06-15 at 00 23 39

When I first connect it, it clearly mentions that it's using AAC.

What might be the problem? I am considering buying high-end headphones, just to get rid of this stupid problem. Every 1-2 hours I need to restart the headphone. Disconnecting and reconnecting doesn't solve the issue, I need to restart the headphones.

@ApplY3D
Copy link

ApplY3D commented Sep 27, 2023

What about macOS 14 Sonoma?

@noizo
Copy link

noizo commented Oct 2, 2023

What about macOS 14 Sonoma?

Audio Technica ATH-M20xBT
Bluetooth explorer/Audio options can't be launched on M1 chipset with sonoma.

By default i'm getting this in console:
A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 221 kbps. 1 frames * (12+644) bytes = 656 per RTP (max=656) every 23.22 ms

@mrdc
Copy link

mrdc commented Oct 25, 2023

I can confirm that there is no AptX in Ventura, but AAC-LC VBR:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 244 kbps. 1 frames * (12+709) bytes = 721 per RTP (max=879) every 23.22 ms

We can try these settings from previous versions of macOS:

"AAC Bitrate" = 128;
"AAC CBR" = 0;
"Apple Bitpool Max" = 64;
"Apple Bitpool Min" = 2;
"Apple Initial Bitpool" = 40; 

@fuomag9
Copy link

fuomag9 commented Nov 12, 2023

I tested this on my Noble Mystique and Sony 1000xm4 and I'm not sure why the Sony gets shafted here. I know the Mystique uses AptX and 1000xm4 uses LDAC, but it doesn't matter here anyways.

Noble Mystique:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 256 kbps. 1 frames * (12+744) bytes = 756 per RTP (max=879) every 23.22 ms

ACMP4AACBaseEncoder.cpp:650   (0x125244440) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 1, bitrate = 128000, quality (complexity) = 64, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 0 (bits), packetBitSizeMin = 0 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

ACMP4AACBaseEncoder.cpp:650   (0x125244440) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 3, bitrate = 192000, quality (complexity) = 32, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 5952 (bits), packetBitSizeMin = 256 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

Sony 1000xm4:

A2DP configured at 44.1 KHz. Codec: AAC-LC, VBR max: 192 kbps. 1 frames * (12+558) bytes = 570 per RTP (max=656) every 23.22 ms

ACMP4AACBaseEncoder.cpp:650   (0x124b34e40) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 1, bitrate = 128000, quality (complexity) = 64, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 0 (bits), packetBitSizeMin = 0 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

ACMP4AACBaseEncoder.cpp:650   (0x124b34e40) @@@@ 'aac ' encoder configuration: srIn = 44100, srOut = 44100, chans = 2, bitRateFormat = 3, bitrate = 144000, quality (complexity) = 32, VBRQ = -1, speechOptimization = 0, packetSizeLimit = 4464 (bits), packetBitSizeMin = 256 (bits), mMaxPacketSize = 1536 (bytes), userBandwidth = 0, delayMode = 0, mCodecDelay = 2112, drcConfiguration = 0, mPrePostFillMask = 0x0

I'm on sonoma and my xm4 get 256 for max VBR
telegram-cloud-photo-size-4-5947399884204260734-y

@AlienegraGeek
Copy link

AlienegraGeek commented Nov 13, 2023

I tested this on my Edifier W820NB and output this log
A2DP configured at 44.1 KHz. Codec: SBC, Bitpool: 52 (322 kbps). 5 frames * 117 bytes = 585 per RTP (max=663) every 14.51 ms
ACSBCEncoder.cpp:214 (0x7fd93aa74cc0) Output format: 2 ch, 44100 Hz, sbc (0x00000000) 0 bits/channel, 0 bytes/packet, 0 frames/packet, 0 bytes/frame

@ballo
Copy link

ballo commented Nov 14, 2023

@Eugene-Y
I can't speak for all MacOS versions, but I do this on Monterey:

  1. Disconnect your headphones.
  2. Open the "Console" app (Under "Applications/Utilities").
  3. In the "Search" field, in the upper-right corner, type "Codec", and hit "Enter".

These instructions don't work on Ventura. Console doesn't show anything even before filtering.
It would be better to know the log file I'm supposed to be monitoring so I can use the terminal instead of Apple's silly app

@SerialHobbyAbandoner
Copy link

@ballo
These instructions don't work on Ventura. Console doesn't show anything even before filtering.
It would be better to know the log file I'm supposed to be monitoring so I can use the terminal instead of Apple's silly app

You need to hit "Start" as well before reconnecting your headphones. It works on Sonoma.

@JavierRSobrino
Copy link

On Sonoma for modern BT5 headphones (like OneOdio Pro C):

defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Apple Initial Bitpool (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Max" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Min" 80;
defaults write com.apple.BluetoothAudioAgent "Stream - Flush Ring on Packet Drop (editable)" 0;
defaults write com.apple.BluetoothAudioAgent "Stream - Max Outstanding Packets (editable)" 16;
defaults write com.apple.BluetoothAudioAgent "Stream Resume Delay" "0.75"

defaults write bluetoothaudiod "Enable AAC codec" -bool true
defaults write bluetoothaudiod "AAC Bitrate" -int 320
defaults write bluetoothaudiod "AAC max packet size" -int 644

Don't forget to reset the bluetoothd daemon:

sudo pkill bluetoothd

I hope it helps.

@aljustiet
Copy link

How enable ldac on macOS?

@jank-jank
Copy link

For everyone struggling with Sony headphones, "Sound Quality Mode" can be changed manually without the app. The instruction below is for the MDR-650BT, but also worked for my old MDR-950B1.
https://helpguide.sony.net/mdr/xb650bt/v1/en/contents/TP0001034995.html
Previously connecting to SBC, now successful: A2DP configured at 44.1 KHz. Codec: AAC-LC [...].

@gr3ddy
Copy link

gr3ddy commented Jan 18, 2024

On Sonoma for modern BT5 headphones (like OneOdio Pro C):

defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Apple Initial Bitpool (editable)" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Max" 80;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Min" 80;
defaults write com.apple.BluetoothAudioAgent "Stream - Flush Ring on Packet Drop (editable)" 0;
defaults write com.apple.BluetoothAudioAgent "Stream - Max Outstanding Packets (editable)" 16;
defaults write com.apple.BluetoothAudioAgent "Stream Resume Delay" "0.75"

defaults write bluetoothaudiod "Enable AAC codec" -bool true
defaults write bluetoothaudiod "AAC Bitrate" -int 320
defaults write bluetoothaudiod "AAC max packet size" -int 644

Don't forget to reset the bluetoothd daemon:

sudo pkill bluetoothd

I hope it helps.

But the bitrate value in console hasn't changed🤔

@JavierRSobrino
Copy link

But the bitrate value in console hasn't changed🤔

Try by restarting the computer. If that doesn't work it probably means your headphones are not capable of higher bitrates.

Also you could try the increasing the bitpool even more. It probably won't work if the headphones have a limit, but it's worth trying:

defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 320;
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" 2;
defaults write com.apple.BluetoothAudioAgent "Apple Initial Bitpool (editable)" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Max" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Min" 2;
defaults write com.apple.BluetoothAudioAgent "Stream - Flush Ring on Packet Drop (editable)" 0;
defaults write com.apple.BluetoothAudioAgent "Stream - Max Outstanding Packets (editable)" 1;
defaults write com.apple.BluetoothAudioAgent "Stream Resume Delay" "0.75"

defaults write bluetoothaudiod "Enable AAC codec" -bool true
defaults write bluetoothaudiod "AAC Bitrate" -int 320
defaults write bluetoothaudiod "AAC max packet size" -int 644

@gr3ddy
Copy link

gr3ddy commented Jan 20, 2024

But the bitrate value in console hasn't changed🤔

Try by restarting the computer. If that doesn't work it probably means your headphones are not capable of higher bitrates.

Also you could try the increasing the bitpool even more. It probably won't work if the headphones have a limit, but it's worth trying:

defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 320;
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" 2;
defaults write com.apple.BluetoothAudioAgent "Apple Initial Bitpool (editable)" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Max" 320;
defaults write com.apple.BluetoothAudioAgent "Negotiated Bitpool Min" 2;
defaults write com.apple.BluetoothAudioAgent "Stream - Flush Ring on Packet Drop (editable)" 0;
defaults write com.apple.BluetoothAudioAgent "Stream - Max Outstanding Packets (editable)" 1;
defaults write com.apple.BluetoothAudioAgent "Stream Resume Delay" "0.75"

defaults write bluetoothaudiod "Enable AAC codec" -bool true
defaults write bluetoothaudiod "AAC Bitrate" -int 320
defaults write bluetoothaudiod "AAC max packet size" -int 644

I'm using an "Alternative A2DP Driver" on Windows PC and it works properly with higher bitpool values. Anyway, now I'm trying to enable 320kbit/s bitrate for AAC codec.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment