So here's something I'm sure people in this thread would find interesting: I found a way to
completely remove CAudioLimiter from the audio path!
What I realized is that CAudioLimiter is an APO like any other, and like all APOs, it has its own registered COM class with its own CLSID.
This blog post has the CLSID - it's
{D69E0717-DD4B-4B25-997A-DA813833B8AC}
. We can deliberately mess up that class registration so that the Windows audio engine cannot find it anymore. Luckily, if the Windows audio engine can't load that APO, then audio still works - it just bypasses the missing APO!
Here's the procedure:
- In the Registry Editor, navigate to
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D69E0717-DD4B-4B25-997A-DA813833B8AC}
.
- You're gonna have to mess with the permissions to be able to make the required changes. Change the owner of the
InProcServer32
subkey to Administrators, then give Administrators Full control.
- Make any change that would prevent the class from being loaded. For example, change the (default) value to add a "DISABLED" prefix so that the path to
audioeng.dll
is broken.
- Restart the Windows Audio service (
audiosrv
).
After I did this, audio still worked fine but I was unable to trigger the limiter - the audio pipeline goes all the way up to 0.00 dBFS without any additional distortion. I think it should be truly bit-perfect now (in 24-bit at least - in 16-bit there is still dithering), but I haven't confirmed it.