Programmatically changing system-wide speaker balance on Windows 7 Programmatically changing system-wide speaker balance on Windows 7 windows windows

Programmatically changing system-wide speaker balance on Windows 7


Shortcut(created by @AndreMiras) --> use Pycaw , usage of Pycaw can be find here

Detailed way -- > First install python package Comtypes either by

  1. using pip install comtypes

    or

  2. download from https://pypi.python.org/pypi/comtypes and then extract the download folder. Find setup.py in extracted folder . Open cmd go to the path of setup.py and then run the command python setup.py install

Now just run the code.py file and you can adjust the volume by changing the first argument of function SetMasterVolumeLevel(-25, None) the first argument must be in between -65 to 0.I have tried this code in windows 8 hopefully it will work on windows 7.

See at the last lines of code to find the volume.SetMasterVolumeLevel(-25, None) and to adust the volume of PC

Code.py

from comtypes import *import comtypes.clientfrom ctypes import POINTERfrom ctypes.wintypes import DWORD, BOOLMMDeviceApiLib = \    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}')    passclass 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', [])    ]    passclass 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 enumeratorendpoint = enumerator.GetDefaultAudioEndpoint( 0, 1 )print endpointvolume = endpoint.Activate( IID_IAudioEndpointVolume, comtypes.CLSCTX_INPROC_SERVER, None )print volumeprint volume.GetMasterVolumeLevel()print volume.GetVolumeRange()#volume.SetMasterVolumeLevel(-65, None) uncomment for 0 volume#volume.SetMasterVolumeLevel(-1, None) uncomment for full volumevolume.SetMasterVolumeLevel(-25, None) #Change the first argument for controlling the volume remember it should be -ve not less than -65