We write software (C#) for Speech Recognition, up until a particular W10 update we had no problems with speech recognition (via usb Microphone/headset). We are now facing issues with recognition and have found that it is caused by the (audio) input device setting "Signal Enhancements" and "Enable Audio Enhancements". We have found that when this setting is disabled, the recognition results are far better and we are not losing words or sentences.
At the moment the only way we are able to disable this is to manually uncheck the box, but this must be done every time a device is connected, and sometimes after Win Update also.
Is there any way of turning this setting of programmatically?
Any pointers or advice would be very much appreciated :)
We are facing a similar problem with our softphone. Signal Enhancements apparently produces a delay start of the audio device (WaveInOpen method with CALLBACK_THREAD) but this effect only appears at few PCs. We cannot for sure say that signal enhancements are the problem but the point is that disabling "signal enhancements" improved the situation at these PCs, no such a big delay, from 1.5 sec to 200 milliseconds.
I anyway wanted to programatically deactivate and activate it again for each telephone call.
I could follow inside my Windows registry (Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture) that the entry
{1da5d803-d492-4edd-8c23-e0c0ffee7f0e},5 (PKEY_AudioEndpoint_Disable_SysFx)
is set and unset when I activate and deactivate the signal enhancements option in the audio settings.
Problem is that this registry entry is inside the FxProperties folder. There are two folders for devices offering audio effects:
...MMDevices\Audio\Capture\{guid}\Properties
...MMDevices\Audio\Capture\{guid}\FxProperties
And when I read the properties with the IMMDevice interface I only get the list of entries inside the Properties folder but no idea how to get access to the FxProperties folder. I use following code: (some parts and checkings are removed, just wrote the necessary)
OpenPropertyStore only gives you access to the Properties folder.
I continue investigating how to gain access to FxProperties store. In this case I would implement something like that:
fxStore->SetValue(PKEY_AudioEndpoint_Disable_SysFx, ENDPOINT_SYSFX_DISABLED);
which would hopefully deactivate the signal enhancement for the corresponding device.
Another attemps with SHGetPropertyStoreFromParsingName or RegGetValue were neither successfull. Error codes were 0x80070002 and ERROR_FILE_NOT_FOUND.
I also tried to start my application with administrative rights but no difference. No sign of the FxProperties entries.
EDIT: I found this link: https://learn.microsoft.com/en-us/answers/questions/669471/how-to-control-enable-audio-enhancements-with-code
IPolicyConfig does the trick but it is an undocumented Windows Interface. I would not rely on it.