SndVol如何能够改变给定音频会话的音量?

Jos*_*ien 8 c++ com winapi core-audio wasapi

我正在编写自己的API来执行SndVol系统实用程序的一些功能.我希望这个API的一部分能够设置给定音频会话的音量级别.

SndVol在"设备"面板上显示一个滑块,用户可以使用该滑块更改音频设备的主音量级别以及每个音频会话的滑块(在"应用程序"面板上),用于更改会话的音量级别:

SndVol Volume Mixer的屏幕截图

如果我拖动其中一个音频会话的滑块手柄,则SndVol可以更改音频会话的音量级别.它是如何做到的?

我认为可以使用Windows Vista的Core Audio API,但我遇到的问题是虽然我能够使用一个设备迭代设备的音频会话IAudioSessionEnumerator,但IAudioSessionEnumerator只能让我访问IAudioSessionControl对象,但我需要该IAudioClient对象来获取一个ISimpleAudioVolume对象我可以用来设置音频会话音量级别.是否有可能获得与IAudioClient对象关联的IAudioSessionControl对象?

Rei*_*man 11

如果在IAudioSessionControl接口上调用QueryInterface,则通常可以访问ISimpleAudioVolume.

  • 天哪,为什么微软的一切都必须如此复杂……? (3认同)
  • @hauzer有时候,由于投入时间学习API并且不想在其他地方重新学习另一个学习曲线,这是一种阻止移动到不同平台的方法; 有时,为函数或方法创建简单的命名约定很困难,特别是在处理可能具有大对象模型的OOP时. (2认同)