Аудио микшер "на приложение" в Windows XP - PullRequest
2 голосов
/ 14 сентября 2009

Мне нужно отключить и включить звук из других процессов в Windows XP. Я ищу лучшую стратегию. Можно написать микшер Kernel Mode, который будет фильтровать входы на устройство вывода? Мой другой подход - установить хуки для перехвата вызовов Win32 различными API. Я бы сильно предпочел менее инвазивный подход.

Некоторые соображения: Вероятно, было бы достаточно охватить приложения, использующие системные компоненты WinMM и DirectSound (т.е. мне не нужно беспокоиться о других аудиоинтерфейсах).

Это в конечном итоге нужно будет использовать из приложения C #. Я достаточно опытен в взаимодействии, но у меня нет внутренних знаний о Win32, чтобы это произошло.

Можно было бы перечислить все приложения, которые необходимо отключить, и подойти к каждому приложению отдельно, хотя ожидается, что этот список будет расти.

P.S. В случае, если кто-то обеспокоен, эти операции будут выполняться с согласия пользователя (без сомнительного бизнеса).

1 Ответ

1 голос
/ 15 сентября 2009

Проблема с драйверами режима ядра заключается в том, что они обычно не поддерживают процесс. Это часть чистой многоуровневой архитектуры. Работа с процессами является обязанностью самой ОС. Аудио драйвер должен обрабатывать аудио. Теперь микшер должен определенно обрабатывать несколько аудиопотоков и может придавать им неодинаковый вес, но его не должно особенно волновать, откуда они пришли. Кроме того, встроенный микшер не предназначен для замены, поэтому вам придется перехватывать аудиопотоки до их микширования.

По этой причине в XP гораздо разумнее использовать Microsoft Detours для перехвата вызовов на уровне API. У вас там есть информация о процессе вызова. Detours в основном внедряет сборку в части пользовательского режима ОС, поэтому я бы посоветовал использовать C ++, а не C # с Detours.

Насколько я понимаю, в Vista аудиостек переписан так, что можно связать аудиопотоки с приложениями, но это общесистемная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...