I am trying to fix an Audacity error that revolves around portmixer. The output / input level is adjusted using the mac portmixer version, but not always in windows. I am debugging portmixer window code to try to get it to work there.
Using IAudioEndpointVolume :: SetMasterVolumeLevelScalar to set the main volume is great for embedded sound, but using external USB or FireWire external interfaces such as RME Fireface 400, the output volume will not change, although it is reflected in the window's sound control panel for this device, as well in the system mixer.
In addition, outside our program, changing the main slider for the system mixer (on the taskbar), there is no effect - the sound card displays the same (full) level regardless of the level that the system is talking about. The only way to change the output level is to use a custom application that hardware developers provide with a map.
The IAudioEndpointVolume :: QueryHardwareSupport function returns ENDPOINT_HARDWARE_SUPPORT_VOLUME so that it can do this.
This function exists for input and output on many devices.
Perhaps this is a window error?
It is possible to get around this by emulating (scaling) the output, but it is not preferable because it is not functionally identical - it is better to allow the audio interface to do the scaling (especially for input, if it includes a preamp).
c ++ windows audio wasapi audacity
Michael chinen
source share