Question

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:

Screenshot of SndVol Volume Mixer

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?

Was it helpful?

Solution

If you call QueryInterface on the IAudioSessionControl interface, you can often get access to an ISimpleAudioVolume.

OTHER TIPS

Larry Osterman, who works for Microsoft and worked on the new audio API stuff, wrote a series of blog posts about the new Vista/Win7 audio features. Here are a few links that might help:

A Quick Run-through the new Windows 7 Multimedia/Audio SDK Samples - Sample shows per-app volume control

Volume Control in Vista - Describes per-application volume control and other new audio features that were added in Vista/Win7

There's an index on the right side of the page; you can look at the Audio tagged items for some other articles that might help.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top