2013-11-07 2 views
0

Я построил внешнее устройство для управления уровнями Windows7-Applications. Серийная связь работает, но я борюсь со встроенным API Windows Session Session (WASAPI).Использование последовательного устройства для управления томами приложений

В частности, у меня есть два вопроса:

  1. ли WASAPI подходит для моей проблемы? Для меня это выглядит слишком негативно
  2. Как я могу получить доступ к уровням каждой запущенной программы?

Windows 7 Audio Mixer

Я буду рад, если вы могли бы мне помочь с этим!

ответ

0

Не проверено, но, похоже, вы действительно можете использовать WASAPI для этого. Используйте этот документ http://msdn.microsoft.com/en-us/library/windows/desktop/dd316769%28v=vs.85%29.aspx в качестве отправной точки. То, как я ожидаю, что это сработает, заключается в том, что для каждой IMMDevice (полученной из IMMDeviceEnumerator) вы активируете IAudioSessionManager, используйте это, чтобы получить ISimpleAudioVolume, а затем вы можете использовать Get/SetMasterVolume для сеанса. Чтобы IAudioSessionManager мог получить вам ISimpleAudioVolume, вам также понадобится GUID сеанса для сеанса, который вы хотите контролировать, поскольку несколько процессов могут записывать на одно и то же устройство в режиме общего доступа. Для этого вы можете использовать IAudioSessionEnumerator для получения «текущих» сеансов, но обратите внимание, что это не будет обновляться по мере добавления новых сеансов в систему. Для этого вам понадобится IAudioSessionManager2 :: RegisterSessionNotification (остерегайтесь, есть некоторые специфические требования к потокам: он должен работать в квартире MTA) и реализовать свой собственный обратный вызов, чтобы добавить сеансы в некоторую внутреннюю коллекцию (поддерживаемую вами и первоначально заполненную из IAudioSessionEnumerator). Также обратите внимание, что в сеансовом перечислителе информация об уведомлениях получает вас в IAudioSessionControl, вам придется выполнить QueryInterface, что в IAudioSessionControl2, чтобы получить руководство по сеансу, которое вам в конечном итоге необходимо будет контролировать для каждого сеанса. И, наконец, вы также захотите использовать IAudioSessionControl :: RegisterAudioSessionNotification, чтобы получать уведомления об изменениях в главном томе сессии, чтобы вы могли синхронизировать (например) sndvol, микшер громкости Windows. Заметим еще раз, что все это из памяти, и я на самом деле не проверял и не проверял ничего из этого. О WASAPI негабаритный, да, я думаю, вы совершенно правы. В любом случае, это должно по крайней мере начать с вас. Удачи.

Смежные вопросы