[wdmaudiodev] Re: [EXTERNAL] trouble preventing device to become Windows' default audio device

  • From: Gary Daniels <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "Gary.Daniels" for DMARC)
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 23 Feb 2021 22:46:30 +0000

Can you explain what you mean by "all endpoints of another device instances 
disappear by doing so"?

PKEY_AudioEndpoint_FormFactor is created by AudioEndpointBuilder when the 
endpoint is created. There's no way for a driver or application to directly 
modify this key and doing so by overriding permissions would result in 
undefined behavior.

AudioEndpointBuilder derives the form factor from the KSNODETYPE/terminal type 
returned by the driver, so to change the form factor the driver would have to 
change the ksnodetype/terminal type reported to Windows. Changing what the 
driver reports for this value on one device wouldn't impact any other devices, 
so i don't see how "all endpoints of another device instances disappear". 
Changing the form factor will affect the rank for the endpoint and can make it 
less likely the endpoint would become default.

This blog is a little out of date and there's more to the story.

Here is the current algorithm:

The driver is installed, and AudioEndpointBuilder creates the audio endpoint
During endpoint creation the form factor, jack location, jack detection, etc. 
as outlined by Matthew's blog are used to calculate a rank for the endpoint
communications endpoints, like telephone and speakerphone, are down-ranked for 
console default
communications endpoints, like telephone and speakerphone, are up-ranked for 
communications default
If no user default has ever been selected, then the endpoint with the highest 
rank is selected as default, and that is the end of it
If you report a form factor like "line level" or SPDIF, those form factors are 
ranked toward the bottom and would be less likely to become default

But, how does user default selection affect the default? Matthew's blog says 
nothing about this, but it will affect you in this case.

Whenever a user manually selects a default endpoint the OS adds the selection 
to a tree of past selections. This tree keeps account of what endpoints were 
available at the time that the selection was made.

Logically, you can think of it this way. If you manually select speaker instead 
of bluetooth, that does not mean that you want to use speaker instead of the 
USB headphones that weren't plugged in at the time you selected speaker over 
bluetooth. It also does not mean you want to use speaker always and forever 
from that day forward (which is what Windows 7 does when you select a default). 
 When the USB headphones are attached at some later day, Windows needs to 
reevaluate the default, giving the newly attached USB headphones the 
possibility of becoming default.

When the default selection algorithm encounters a newly attached device which 
was not present when a user previously selected the default, the algorithm 
gives preference to this newly attached device unless the device is down-ranked 
for the role. Based on user studies, we found there is a strong expectation by 
users that newly attached hardware becomes the default, regardless of what was 
selected at some point in the past. This algorithm reflects that user 
expectation, but also ensures that a telephone wouldn't become the default 
console endpoint just because it was plugged in after a manual selection.

Also, when a wrong decision is made, which is inevitable when you're talking 
about user preferences and not technical requirements, it is best err on the 
side of switching to something new when that new item is connected. The user 
will be aware of a newly installed device when it is installed, and if audio 
immediately moves to this newly installed device they will quickly make the 
connection and correct it if they don't want it as default. Once they correct 
it, Windows will store the preference in the tree and they shouldn't ever have 
to communicate that preference again. The Windows 7 solution, where manually 
selecting the speaker as the default 10 months ago prevented all newly attached 
devices from ever becoming the default, caused a lot of confusion with users 
partly because they did not make the connection between the device being 
plugged in not working, and their selection many months, or years, in the past 
of the speaker as the default.

So, what does this all mean for you. There does not exist a down-ranked form 
factor for both console and communications, so there is no way to mark your 
device to always be avoided by the default selection algorithm. No matter what 
form factor is selected, it will always have the potential to automatically 
become the default. If you were to select a communications form factor, like 
telephone, then you could guarantee that it will never become the console 
default because it is down-ranked for console. However, it would always become 
the communications default that is used by Teams, Skype, Zoom, etc.

Gary Daniels
Senior SDE
Microsoft Windows Audio

Sent from Outlook<http://aka.ms/weboutlook>

From: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> on 
behalf of noise@xxxxxxxx <noise@xxxxxxxx>
Sent: Tuesday, February 23, 2021 8:02 AM
To: wdmaudiodev@xxxxxxxxxxxxx <wdmaudiodev@xxxxxxxxxxxxx>
Subject: [EXTERNAL] [wdmaudiodev] trouble preventing device to become Windows' 
default audio device


according to Matthews outline of the Windows default audio device evaluation 
process at

its possible to kind of "downvote" a device by setting 
PKEY_AudioEndpoint_FormFactor of the endpoint to something “unattractive” for a 
default device to Windows.

This works, however all other endpoints of the same and all endpoints of 
another device instances disappear by doing so.
I guess there is some misunderstanding on my side here.

Any hint or advice of how to make a device unattractive enough to Windows to 
not being automatically selected, while still allowing the user to make it the 
default on its on wish are highly appreciated!

Thanks & viele Grüße/Cheers,

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx


Other related posts: