Python 在Windows 7上以编程方式更改系统范围的扬声器平衡

Python 在Windows 7上以编程方式更改系统范围的扬声器平衡,python,windows,audio,windows-7,Python,Windows,Audio,Windows 7,如何在Windows 7上以编程方式更改系统范围的扬声器平衡 (我只能用Python和AHK编程。)快捷方式(由@AndreMiras创建)-->使用,可以找到Pycaw的用法 详细方式-->首先通过 使用pip安装comtypes 或 从下载,然后解压缩下载文件夹。在提取的文件夹中查找setup.py。打开cmd转到setup.py路径,然后运行命令python setup.py install 现在只需运行code.py文件,就可以通过更改函数的第一个参数来调整音量SetMasterVo

如何在Windows 7上以编程方式更改系统范围的扬声器平衡

(我只能用Python和AHK编程。)

快捷方式(由@AndreMiras创建)-->使用,可以找到Pycaw的用法

详细方式-->首先通过

  • 使用pip安装comtypes

  • 从下载,然后解压缩下载文件夹。在提取的文件夹中查找setup.py。打开cmd转到setup.py路径,然后运行命令python setup.py install

  • 现在只需运行code.py文件,就可以通过更改函数的第一个参数来调整音量SetMasterVolumeLevel(-25,None)第一个参数必须在-65到0之间。 我在Windows8中尝试过这段代码,希望它能在Windows7上运行

    请参见代码的最后几行,以查找音量。SetMasterVolumeLevel(-25,无)并调整PC的音量

    代码.py

    from comtypes import *
    import comtypes.client
    from ctypes import POINTER
    from ctypes.wintypes import DWORD, BOOL
    
    MMDeviceApiLib = \
        GUID('{2FDAAFA3-7523-4F66-9957-9D5E7FE698F6}')
    IID_IMMDevice = \
        GUID('{D666063F-1587-4E43-81F1-B948E807363F}')
    IID_IMMDeviceEnumerator = \
        GUID('{A95664D2-9614-4F35-A746-DE8DB63617E6}')
    CLSID_MMDeviceEnumerator = \
        GUID('{BCDE0395-E52F-467C-8E3D-C4579291692E}')
    IID_IMMDeviceCollection = \
        GUID('{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}')
    IID_IAudioEndpointVolume = \
        GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}')
    
    class IMMDeviceCollection(IUnknown):
        _iid_ = GUID('{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}')
        pass
    
    class IAudioEndpointVolume(IUnknown):
        _iid_ = GUID('{5CDF2C82-841E-4546-9722-0CF74078229A}')
        _methods_ = [
            STDMETHOD(HRESULT, 'RegisterControlChangeNotify', []),
            STDMETHOD(HRESULT, 'UnregisterControlChangeNotify', []),
            STDMETHOD(HRESULT, 'GetChannelCount', []),
            COMMETHOD([], HRESULT, 'SetMasterVolumeLevel',
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'SetMasterVolumeLevelScalar',
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetMasterVolumeLevel',
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'GetMasterVolumeLevelScalar',
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'SetChannelVolumeLevel',
                (['in'], DWORD, 'nChannel'),
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'SetChannelVolumeLevelScalar',
                (['in'], DWORD, 'nChannel'),
                (['in'], c_float, 'fLevelDB'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetChannelVolumeLevel',
                (['in'], DWORD, 'nChannel'),
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'GetChannelVolumeLevelScalar',
                (['in'], DWORD, 'nChannel'),
                (['out','retval'], POINTER(c_float), 'pfLevelDB')
            ),
            COMMETHOD([], HRESULT, 'SetMute',
                (['in'], BOOL, 'bMute'),
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'GetMute',
                (['out','retval'], POINTER(BOOL), 'pbMute')
            ),
            COMMETHOD([], HRESULT, 'GetVolumeStepInfo',
                (['out','retval'], POINTER(c_float), 'pnStep'),
                (['out','retval'], POINTER(c_float), 'pnStepCount'),
            ),
            COMMETHOD([], HRESULT, 'VolumeStepUp',
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'VolumeStepDown',
                (['in'], POINTER(GUID), 'pguidEventContext')
            ),
            COMMETHOD([], HRESULT, 'QueryHardwareSupport',
                (['out','retval'], POINTER(DWORD), 'pdwHardwareSupportMask')
            ),
            COMMETHOD([], HRESULT, 'GetVolumeRange',
                (['out','retval'], POINTER(c_float), 'pfMin'),
                (['out','retval'], POINTER(c_float), 'pfMax'),
                (['out','retval'], POINTER(c_float), 'pfIncr')
            ),
    
        ]
    
    class IMMDevice(IUnknown):
        _iid_ = GUID('{D666063F-1587-4E43-81F1-B948E807363F}')
        _methods_ = [
            COMMETHOD([], HRESULT, 'Activate',
                (['in'], POINTER(GUID), 'iid'),
                (['in'], DWORD, 'dwClsCtx'),
                (['in'], POINTER(DWORD), 'pActivationParans'),
                (['out','retval'], POINTER(POINTER(IAudioEndpointVolume)), 'ppInterface')
            ),
            STDMETHOD(HRESULT, 'OpenPropertyStore', []),
            STDMETHOD(HRESULT, 'GetId', []),
            STDMETHOD(HRESULT, 'GetState', [])
        ]
        pass
    
    class IMMDeviceEnumerator(comtypes.IUnknown):
        _iid_ = GUID('{A95664D2-9614-4F35-A746-DE8DB63617E6}')
    
        _methods_ = [
            COMMETHOD([], HRESULT, 'EnumAudioEndpoints',
                (['in'], DWORD, 'dataFlow'),
                (['in'], DWORD, 'dwStateMask'),
                (['out','retval'], POINTER(POINTER(IMMDeviceCollection)), 'ppDevices')
            ),
            COMMETHOD([], HRESULT, 'GetDefaultAudioEndpoint',
                (['in'], DWORD, 'dataFlow'),
                (['in'], DWORD, 'role'),
                (['out','retval'], POINTER(POINTER(IMMDevice)), 'ppDevices')
            )
        ]
    
    
    
    
    
    enumerator = comtypes.CoCreateInstance( 
        CLSID_MMDeviceEnumerator,
        IMMDeviceEnumerator,
        comtypes.CLSCTX_INPROC_SERVER
    )
    
    print enumerator
    endpoint = enumerator.GetDefaultAudioEndpoint( 0, 1 )
    print endpoint
    volume = endpoint.Activate( IID_IAudioEndpointVolume, comtypes.CLSCTX_INPROC_SERVER, None )
    print volume
    print volume.GetMasterVolumeLevel()
    print volume.GetVolumeRange()
    #volume.SetMasterVolumeLevel(-65, None) uncomment for 0 volume
    #volume.SetMasterVolumeLevel(-1, None) uncomment for full volume
    volume.SetMasterVolumeLevel(-25, None) #Change the first argument for controlling the volume remember it should be -ve not less than -65
    

    1.太棒了。2.我如何让它改变平衡而不仅仅是音量?这就是问题所在。您可以使用SetChannelVolumeLevel(0,-65,无)功能更改扬声器的平衡。转到最后一行代码并添加以下行:volume.SetChannelVolumeLevel(0,-30,无)您可以更改调整平衡的第二个参数范围是从0到-65就是这样,做得好!我已经创建了一个Python库@AndreMiras,很好地完成了这项工作。有没有办法取消音量静音?