2

I have a pair of WH-1000XM3 headphones which present themselves as two output audio endpoints in the Sound settings on Windows 10:

  • Headphones (high-quality, high-latency)
  • Headset (low quality, low sample rate, but very low latency)

They also have a headset mic input endpoint.

In order to use the headset output profile when on voice calls and when gaming, I have my Default Output Device and Default Communication Device both set to the headset. This gives me the low latency I want, at the expense of audio quality which I accept. This works perfectly on Windows 10 - I can hear both audio calls and multimedia through the low-latency, lower-quality endpoint. If I'm in a voice call, I can be heard through the headset microphone.

I have paired these headphones to a new laptop running Windows 11 Pro, and I only see one output endpoint in the sound control panel (as well as in the advanced options in mmsys.cpl) - the headphones, which provide stereo, high-quality audio at high latency. The headset is not visible and cannot be selected.

Weirdly enough, if I check the actual audio endpoints known to the PnP subsystem through Powershell, I do see both the headphones, and the hands-free/headset profiles, and they're marked OK.

Get-PnpDevice -Class 'AudioEndpoint'

Status     Class           FriendlyName                                                                     InstanceId
------     -----           ------------                                                                     ----------
Unknown    AudioEndpoint   Speakers (High Definition Audio Device)                                          SWD\MMDE...
Unknown    AudioEndpoint   Microphone (High Definition Audio Device)                                        SWD\MMDE...
Unknown    AudioEndpoint   Microphone Array (Realtek(R) Audio)                                              SWD\MMDE...
OK         AudioEndpoint   Headset (WH-1000XM3) SWD\MMDE...
Unknown    AudioEndpoint   Speakers (High Definition Audio Device)                                          SWD\MMDE...
OK         AudioEndpoint   Headset (WH-1000XM3 Hands-Free) SWD\MMDE...
OK         AudioEndpoint   Speakers (Realtek(R) Audio) SWD\MMDE...
Unknown    AudioEndpoint   Microphone (High Definition Audio Device)                                        SWD\MMDE...
OK         AudioEndpoint   Headphones (WH-1000XM3) SWD\MMDE...
OK         AudioEndpoint   Microphone Array (Realtek(R) Audio)                                              SWD\MMDE...
Unknown    AudioEndpoint   Speakers (Realtek(R) Audio) SWD\MMDE...
Unknown    AudioEndpoint   Microphone Array (Realtek(R) Audio)                                              SWD\MMDE...

How do I actually use these profiles? If I start a voice call, Windows will switch to the HSP audio output automatically when the microphone is enabled, but being in a voice call indefinitely is not a sensible workaround.

Avoiding bluetooth latency with a 3.5 mm cord is also not a viable workaround for me - I still want to use the bluetooth headset's microphone, and I cannot do so if it's powered down in order to be used with analog audio via 3.5 mm jack.

Can I configure the same setting to use the HSP/HFP endpoint at all times on Windows 11, or do I need some kind of silly workaround like a custom program that holds the microphone open just for the sake of getting the right output config? Is there some hidden registry setting that will allow me to set this manually?

nanofarad
  • 610
  • 1
  • 7
  • 21

1 Answers1

1

I was not able to find a user-accessible setting to work around the issue, but the workaround I hypothesized does solve this issue fully.

A program simply needs to open the microphone - WSAPI event-driven, shared mode works perfectly. It's fairly straightforward to strip down this sample to simply open the device, and then endlessly discard incoming buffers. The microphone handle/session is dropped if the machine goes to hibernate and back up (likely also the case for sleep) but it should also be straightforward to detect and handle if one does not want to restart the workaround program manually.

nanofarad
  • 610
  • 1
  • 7
  • 21