нужно определить воспроизводится ли в данный момент какой-то звук звуковой картой (допустим винамп играет или фильм смотрят). даже не знаю с какой стороны подойти к этой проблеме. подскажите плз.
MrLika wrote:
>
>
> нужно определить воспроизводится ли в данный момент какой-то звук
> звуковой картой (допустим винамп играет или фильм смотрят). даже не знаю
> с какой стороны подойти к этой проблеме. подскажите плз.
Решение "в лоб" — посмотреть не ходят ли соотвествующие IRP_* к драйверу
звуковой карты/микшеру. Требует написания маленького драйвера.
А вот что-то более умное не придумывается...
Posted via RSDN NNTP Server 1.9
Здравствуйте, MrLika, Вы писали:
ML>нужно определить воспроизводится ли в данный момент какой-то звук звуковой картой (допустим винамп играет или фильм смотрят).
Чтобы определить, что
воспроизводится звук — надо измерять уровень сигнала на выходе карты
Если исходить из того, что карта имеет WDM-драйвер, и задачу нужно решать под системой не ниже 98/2k, то можно найти воспроизводящий (rendering) пин драйвера, и дать ему запрос KSPROPERTY_PIN_CINSTANCES, на который он ответит, сколько раз его открыли (инстанцировали). Если драйвер на попытку открыть пин ответит что-нибудь вроде STATUS_INSUFFICIENT_RESOURCES — значит, он уже кем-то открыт, и больше одного экземпляра не допускает.
Чтобы открыть пин — придется поизвращаться с добыванием адреса функции KsCreatePin из ksuser.dll. Подробности можно посмотреть в примере DirectKS, скачав его с сайта MS.
Если Wave-устройство обслуживается WDM-драйвером, то имя интерфейса для доступа к драйверу под 2k и выше можно получить через waveOutMessage (DRV_QUERYDEVICEINTERFACE). Под 98/ME придется перебирать все устройства класса RENDER и сравнивать имена.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>