我的机器有两个音频输入:一个用于游戏的麦克风,以及一个用于吉他的线路。当使用一个时,重要的是另一个被静音以移除嘶嘶声/静态,所以我希望写一个小脚本来切换哪一个被静音(点击托盘图标,切换到我的输入设备,静音是相当不方便的和取消静音)。
我想也许我可以用pywin32做到这一点,但是everything我find似乎特定于设置输出音量而不是输入,我对win32不够熟悉甚至知道在哪里寻找更好的信息。
有人能指出我正确的方向吗?
答案 0 :(得分:5)
免责声明: 我无论如何都不是Windows编程大师......但这是我最好的猜测
根据pywin32 FAQ:
如何使用公开的Win32函数执行xyz?
一般来说,诀窍是不 认为这是一个Python / PyWin32问题 根本,但要搜索 您的文档或示例 问题,不管语言。 这通常会给你 您需要执行的信息 使用这些的相同操作 扩展。包括在内 文档会告诉你 参数和返回类型 功能,以便您可以轻松确定 正确的“拼写”东西的方法 蟒。
听起来您正在寻找控制“端点设备”卷(即您的声卡/线路输入)。这是该方向的API reference。
Here如果之前的音频设备不是您想要的,那么在Windows中控制音频设备会有一个更广泛的视角。
Here是一个博客条目,来自那些在C#中尝试做的事情(我知道你指定了python,但你可以从代码中提取正确的API调用)。
祝你好运!如果你确实得到了工作代码,我很有兴趣看到它。答案 1 :(得分:2)
我遇到了类似的问题,无法弄清楚如何使用Windows API来做我想要的事情。我最终只是使用AutoIt自动化GUI。我认为这将是最快速,最简单的解决方案(尽管是“hacky”解决方案)。正如我今天早些时候answered所做的那样,你可以在Python中使用AutoIT。
答案 2 :(得分:1)
你最好使用ctypes
- 如果你使用已经包含的API之一,pywin32
是好的,但我认为你会对声音API感到不快。与tgray
提供的C#链接中的示例代码一起使用ctypes
和winmm.dll
,或者使用SWIG
来包装winmm.dll
。这可能会更快,因为您不必在ctypes
中为API调用中使用的MIXERCONTROLDETAILS
等类型构建C结构映射类型。
答案 3 :(得分:0)
tgray 似乎已经指出了正确的方向,但是一旦你找到了正确的Win32 API来处理,你有几个选择:
1)尝试使用pywin32 ...但它可能包含或不包含您需要的功能(可能没有)。因此,如果您需要使用COM来获得所需的功能,那么您可能只想这样做。
2)使用ctypes。使用ctypes包装任何C功能通常很容易。
3)如果C#示例看起来像你需要的那样,你应该可以用很少的努力将它翻译成IronPython。可能比使用C API更容易。当然是YMMV。