How is SndVol able to change the volume level of a given audio session?
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 pos开发者_Go百科sible to get the IAudioClient
object associated with an IAudioSessionControl
object?
If you call QueryInterface on the IAudioSessionControl interface, you can often get access to an ISimpleAudioVolume.
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.
精彩评论