首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用混频器api控制windows 7中的主混频器体积?

如何使用混频器api控制windows 7中的主混频器体积?
EN

Stack Overflow用户
提问于 2014-01-13 12:53:28
回答 1查看 3.3K关注 0票数 4

在windows中,使用混频器api.It设置目标线音量可以很容易地控制混频器设备的主音量,Microsoft.But提供的sample应用程序在windows 7的情况下很容易测试,当我在应用程序中打开混频器设备时,它显示为新的卷应用程序,并且我只能控制我的application.Not的音量,能够控制system.Can的完整声音,任何人都建议我如何控制扬声器的完整声音,这将影响所有正在运行的应用程序的声音。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-13 15:40:26

我相信你要找的方法是SetMasterVolumeLevelScalar

在C中有一个简短的例子(对不起lpVtbls):

代码语言:javascript
复制
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,则:

代码语言:javascript
复制
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 } };
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21091823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档