如何改变窗户的音量?

时间:2017-01-28 10:43:08

标签: c++ windows winapi

我需要将窗口的体积设置为固定的40%或50%如何? 以下仅将其设置为上一个值+新值而不是固定值。

#include <windows.h>
#pragma comment(lib, "winmm")

// to mute:
waveOutSetVolume(NULL, 0);

// full volume:
waveOutSetVolume(NULL, 0xFFFF);

1 个答案:

答案 0 :(得分:1)

waveOutSetVolume的文档说明了如何解释 dwVolume 参数:

  

低位字包含左声道音量设置,高位字包含右声道设置。 [...]
  如果设备不支持左右音量控制,则dwVolume的低位字指定音量级别,忽略高位字。

换句话说,您必须为卷构造DWORD值,其中高阶和低阶字都是相同的值(介于0和65535之间)。

以下函数根据指定百分比的整数输入返回适当的值:

DWORD VolumeValue( const int percentage ) {
    // Clamp percentage value
    int p = min( 100, max( 0, percentage ) );
    // Calculate scaled value for one channel
    const WORD wVol = static_cast<WORD>( ::MulDiv( 65535, p, 100 ) );
    // Construct return value for both channels
    const DWORD retVal = ( ( wVol << 16 ) | wVol );
    return retVal;
}