gpt4 book ai didi

c++ - 如何使用混音器 api 在 Windows 7 中控制主混音器音量?

转载 作者:可可西里 更新时间:2023-11-01 14:13:44 26 4
gpt4 key购买 nike

在 windows XP 中,通过使用混音器 api 设置目标线路的音量来控制混音器设备的主音量非常容易。可以通过 Microsoft 提供的 sdk 示例应用程序轻松测试。但是在 windows 7 的情况下,每当我在我的应用程序中打开一个混音器设备,它显示为新的音量应用程序,我只能控制我的应用程序的音量。无法控制系统的完整声音。任何人都可以建议我如何控制会影响声音的扬声器的完整声音所有正在运行的应用程序。

enter image description here

如何使用 Windows 7 中的应用程序更改扬声器音量?

最佳答案

我相信您正在寻找的方法是 SetMasterVolumeLevelScalar

C 中的一个简短示例(对 lpVtbls 感到抱歉):

BOOL AddMasterVolumeLevelScalar(float fMasterVolumeAdd)
{
IMMDeviceEnumerator *deviceEnumerator = NULL;
IMMDevice *defaultDevice = NULL;
IAudioEndpointVolume *endpointVolume = NULL;
HRESULT hr;
float fMasterVolume;
BOOL bSuccess = FALSE;

hr = CoCreateInstance(&XIID_MMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, &XIID_IMMDeviceEnumerator, (LPVOID *)&deviceEnumerator);
if(SUCCEEDED(hr))
{
hr = deviceEnumerator->lpVtbl->GetDefaultAudioEndpoint(deviceEnumerator, eRender, eConsole, &defaultDevice);
if(SUCCEEDED(hr))
{
hr = defaultDevice->lpVtbl->Activate(defaultDevice, &XIID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
if(SUCCEEDED(hr))
{
if(SUCCEEDED(endpointVolume->lpVtbl->GetMasterVolumeLevelScalar(endpointVolume, &fMasterVolume)))
{
fMasterVolume += fMasterVolumeAdd;

if(fMasterVolume < 0.0)
fMasterVolume = 0.0;
else if(fMasterVolume > 1.0)
fMasterVolume = 1.0;

if(SUCCEEDED(endpointVolume->lpVtbl->SetMasterVolumeLevelScalar(endpointVolume, fMasterVolume, NULL)))
bSuccess = TRUE;
}

endpointVolume->lpVtbl->Release(endpointVolume);
}

defaultDevice->lpVtbl->Release(defaultDevice);
}

deviceEnumerator->lpVtbl->Release(deviceEnumerator);
}

return bSuccess;
}

如果未定义 GUID:

const static GUID XIID_IMMDeviceEnumerator = { 0xA95664D2, 0x9614, 0x4F35, { 0xA7, 0x46, 0xDE, 0x8D, 0xB6, 0x36, 0x17, 0xE6 } };
const static GUID XIID_MMDeviceEnumerator = { 0xBCDE0395, 0xE52F, 0x467C, { 0x8E, 0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E } };
const static GUID XIID_IAudioEndpointVolume = { 0x5CDF2C82, 0x841E, 0x4546, { 0x97, 0x22, 0x0C, 0xF7, 0x40, 0x78, 0x22, 0x9A } };

关于c++ - 如何使用混音器 api 在 Windows 7 中控制主混音器音量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com