当前位置: 首页 > 面试题库 >

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

霍财
2023-03-14
问题内容

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

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


问题答案:

快捷方式(由@AndreMiras创建)->使用Pycaw,有关Pycaw的用法可在此处找到

详细方法->首先安装python软件包Comtypes

  1. 使用 pip install comtypes

要么

  1. 从https://pypi.python.org/pypi/comtypes下载,然后解压缩下载文件夹。在解压缩的文件夹中找到setup.py。打开cmd转到 setup.py 的路径,然后运行命令 python setup.py install

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

请参阅最后 行代码以找到 音量。SetMasterVolumeLevel(-25,None) 并调整PC的音量

代码

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


 类似资料:
  • 我正在尝试使用以下方法为我的应用程序设置日历: 许可: 获取异常:用户10215和当前进程都没有Android.permission.set_time。

  • 我通过媒体播放器播放文件,我想提供扬声器开/关、通过耳机播放、蓝牙等选项。我尝试了以下适用于android 2.2的代码,但我想要一些也可以同时适用于2.2和4.0的代码。你能帮我以编程方式打开/关闭扬声器并通过耳机播放吗? P、 S:我已在清单中授予此权限:

  • 我使用下面的hack以编程方式更改homeAsupIndicator。 但这在大多数新手机(HTC One、Galaxy S3等)上都不起作用。是否有一种方法可以跨设备统一更改。我只需要在主屏幕上更改它。其他屏幕将具有默认屏幕。因此无法使用样式。xml

  • 这里有个简单的问题。我有一个UIButton,currencySelector,我想通过编程更改文本。以下是我所拥有的: Xcode给了我一个错误“预期声明”。我做错了什么?我该如何更改按钮的文本?

  • 我已经读过一些关于颜色的线程,但所有这些线程都必须通过style.xml进行设置。 现在我用这个来确定颜色。 是否可以不使用XML,例如使用代码来更改SwitchCompat/Checkbox的颜色?

  • 播放音符或者歌曲 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:00:00后,用猫叫声叫醒我

  • 扬声器模块能够录制并播放声音。 净重量:24.5g 体积:48×48×13mm 参数 工作电压:DC 5V 抗跌落能力:1.5m 工作温度:-10℃~55℃ 工作湿度:<95% 特点 支持录音存储 内置多种音效 配合软件支持AI语音识别 配合WiFi模块支持离线运行"

  • 光环板可以连接 mbuild 的 扬声器 模块进行编程。 1. 扬声器(1)播放音符(C4)以(0.25)拍 指定扬声器播放指定音符,并持续指定拍数。 示例 按下光环板的按钮,扬声器1会播放音符C4,持续0.25拍。 2. 扬声器(1)以(700)赫兹播放声音,持续(1)秒 指定扬声器以指定频率播放声音,单位为赫兹,并持续指定时间。 示例 按下光环板的按钮,扬声器1会播放频率为700赫兹的声音,持