【问题标题】:Windows XP - mute/unmute audio in programmatically in PythonWindows XP - 在 Python 中以编程方式静音/取消静音
【发布时间】:2010-11-08 17:06:24
【问题描述】:
我的机器有两个音频输入:一个用于游戏的麦克风和一个用于吉他的线路。使用一个时,将另一个静音以消除嘶嘶声/静电很重要,因此我希望编写一个小脚本来切换哪个静音(单击托盘图标,切换到我的输入设备,静音相当不方便并取消静音)。
我想也许我可以用pywin32 做到这一点,但everything 我可以find 似乎专门用于设置输出音量而不是输入,而且我对win32 不够熟悉,甚至不知道在哪里看了解更多信息。
谁能指出我正确的方向?
【问题讨论】:
标签:
python
windows
winapi
audio
pywin32
【解决方案1】:
免责声明:无论如何我都不是 Windows 编程大师……但这是我的最佳猜测
根据pywin32 FAQ:
如何使用暴露的 Win32 函数做 xyz?
一般来说,诀窍是不要
将其视为 Python/PyWin32 问题
完全没有,但要搜索
您的文档或示例
问题,与语言无关。
这通常会给你
您需要执行的信息
使用这些相同的操作
扩展名。包含的
文档会告诉你
的参数和返回类型
功能,因此您可以轻松确定
“拼写”事物的正确方法
蟒蛇。
听起来您正在寻找控制“端点设备”音量(即您的声卡/线路输入)。这是那个方向的API reference。
Here 对在 windows 中控制音频设备进行了更广泛的了解,如果以前不是您想要的。
Here 的博客文章来自某人,他在 C# 中做了你想做的事情(我知道你指定了 python,但你可能能够从代码中提取正确的 API 调用)。
祝你好运!如果你确实得到了工作代码,我很想看看。
【解决方案2】:
使用ctypes 可能会更好 - 如果您使用已包含的 API 之一,pywin32 很好,但我认为您对声音 API 会不走运。与tgray 提供的 C# 链接中的示例代码一起,使用ctypes 和winmm.dll,或者使用SWIG 包装winmm.dll。这可能会更快,因为您不必在 ctypes 中为 API 调用中使用的 MIXERCONTROLDETAILS 等类型构建 C 结构映射类型。
【解决方案3】:
tgray 似乎已经为您指明了正确的方向,但是一旦您找到了正确的 Win32 API 来处理,您就有几个选择:
1) 尝试使用 pywin32...但它可能包含也可能不包含您需要的功能(它可能没有)。因此,如果您需要使用 COM 来获得所需的功能,您可能只想这样做。
2) 使用 ctypes。使用 ctypes 封装几乎所有 C 功能通常都非常容易。
3) 如果 C# 示例看起来像您需要的那样,您应该能够毫不费力地将其转换为 IronPython。可能比使用 C API 更容易。当然是 YMMV。
【解决方案4】:
我遇到了类似的问题,不知道如何使用 Windows API 来做我想做的事。我最终只是用 AutoIt 自动化了 GUI。我认为这将是最快和最简单的解决方案(尽管是一个“hacky”解决方案)。正如我今天早些时候answered,您可以在 Python 中使用 AutoIT。