Windows XP – отключение/включение звука программно на Python

StackOverflow https://stackoverflow.com/questions/1092466

Вопрос

Моя машина имеет два аудиовхода:микрофон, который я использую для игр, и провод, который я использую для гитары.При использовании одного важно, чтобы звук другого был отключен, чтобы убрать шипение/помехи, поэтому я надеялся написать небольшой скрипт, который бы переключал, какой из них был отключен (довольно неудобно щелкать значок в трее, переключаться на мое устройство ввода, отключать звук и включить звук).

Я подумал, возможно, я мог бы сделать это с pywin32, но все Я мог бы находить Кажется, он предназначен для настройки громкости вывода, а не ввода, и я недостаточно знаком с Win32, чтобы даже знать, где искать более подробную информацию.

Может ли кто-нибудь указать мне в правильном направлении?

Это было полезно?

Решение

У меня была аналогичная проблема, и я не мог понять, как использовать Windows API, чтобы делать то, что я хотел.В итоге я просто автоматизировал графический интерфейс с помощью AutoIt.Я думаю, что это будет самое быстрое и простое решение (хотя и «хакерское»).Как и я ответил ранее сегодня вы можете использовать AutoIT из Python.

Другие советы

Отказ от ответственности: Я ни в коем случае не гуру программирования Windows... но вот мое лучшее предположение.

Согласно Часто задаваемые вопросы по pywin32:

Как использовать открытые функции Win32 для выполнения xyz?

В целом, хитрость заключается в том, чтобы считать это вообще не вопрос Python/Pywin32, а для поиска документации или примеров вашей проблемы, независимо от языка.Как правило, это даст вам информацию, необходимую для выполнения тех же операций, используя эти расширения.Включенная документация расскажет вам аргументы и типы возврата функций, поэтому вы можете легко определить правильный способ «писать» вещи в Python.

Похоже, вы хотите контролировать тома «конечного устройства» (т.звуковая карта/линейный вход).Вот Справочник по API в этом направлении.

Здесьэто немного более широкий взгляд на управление аудиоустройствами в Windows, если предыдущее не было тем, что вам нужно.

Здесьэто запись в блоге человека, который сделал то, что вы пытаетесь сделать, на C# (я знаю, что вы указали Python, но вы, возможно, сможете извлечь правильные вызовы API из кода).

Удачи!И если вы получите рабочий код, мне будет интересно его увидеть.

Вероятно, вам лучше использовать ctypes - pywin32 это хорошо, если вы используете один из уже включенных API, но я думаю, что вам не повезет со звуковыми API.Вместе с примером кода по ссылке C#, предоставленной tgray, использовать ctypes и winmm.dll, или, альтернативно, используйте SWIG обернуть winmm.dll.Это вполне может быть быстрее, поскольку вам не придется создавать типы отображения структур C в ctypes для таких типов, как MIXERCONTROLDETAILS которые используются в вызовах API.

серый кажется, указал вам правильное направление, но как только вы найдете подходящие API-интерфейсы Win32, у вас появится несколько вариантов:

1) Попробуйте использовать pywin32... но он может включать или не включать в себя необходимую вам функциональность (вероятно, это не так).Таким образом, вы, вероятно, захотите сделать это только в том случае, если вам нужно использовать COM для получения необходимой вам функциональности.

2) Используйте ctypes.Как правило, довольно легко обернуть практически любую функциональность C с помощью ctypes.

3) Если пример C# выглядит так, как вам нужно, вы сможете перевести его на IronPython без особых усилий.Может быть проще, чем использовать C API.ЮММВ, конечно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top