I am writing my own API to perform some of the functionality of the SndVol system utility. I would like part of this API to be the ability to set the volume level of a given audio session.
SndVol displays a slider on the "Device" panel that the user can use to change the master volume level of the audio device as well as a slider for each audio session (on the "Applications" panel) that changes the volume level of the session:
If I drag the slider handle for one of the audio sessions, then SndVol is able to change the audio session's volume level. How does it do that?
I thought that it was possible using Windows Vista's Core Audio API, but I encountered the problem that although I am able to iterate audio sessions of a device using an IAudioSessionEnumerator
, the IAudioSessionEnumerator
only gives me access to IAudioSessionControl
objects, but I need the IAudioClient
object to obtain an ISimpleAudioVolume
object that I can use to set the audio session volume level. Is it possible to get the IAudioClient
object associated with an IAudioSessionControl
object?