Получить уровень громкости аудио сеанса - PullRequest
1 голос
/ 15 июля 2009

Кто-нибудь знает, как получить текущий уровень громкости аудиосеанса * в Vista или 7?

У меня есть экземпляры IAudioSessionControl2 и IAudioSessionManager2, которые необходимо прослушивать для изменения громкости , но фактическое получение текущего тома оказывается неуловимым.

* под аудиосессией я имею в виду (примерно) контроль звука для каждого приложения, а не "основной"


Обратите внимание, что (насколько я могу судить) IAudioSessionManager2 -> GetSimpleVolume () здесь не правильный ответ. Единственное, что публикует GUID в IAudioSessionControl2, это параметр группировки , и его использование в GetSimpleVolume создает новые сеансы, а не дает вам контроль над существующим. GetSimpleVolume () - это то, что я хочу, но откуда поступают параметры в этой настройке?

Ответы [ 2 ]

1 голос
/ 18 июля 2009

На самом деле IAudioSessionManager :: GetSimpleAudioVolume - это то, что вы ищете.

Аудио сеанс идентифицируется двумя (или тремя) вещами: идентификатор сеанса, идентификатор процесса и флаг перекрестного процесса (если флаг перекрестного процесса указывается при создании потока, идентификатор процесса игнорируется).

Простая громкость звука контролирует громкость всех потоков в этом аудио сеансе. Это довольно просто (большинство сред рендеринга указывают NULL для GUID сеанса). Если ваше приложение использует определенный GUID сеанса, вы должны просто указать GUID сеанса, который использует ваше приложение.

Есть еще один поворот. Регулятор громкости (sndvol.exe) объединяет все сеансы с одним и тем же «параметром группировки» вместе в пользовательском интерфейсе - это не является частью регулятора громкости, это удобная функция пользовательского интерфейса, которая существует только для веб-браузеров, таких как IE, - она ​​существует разрешить сторонним звуковым платформам (которые указывают GUID сеанса GUID_NULL) и WMP OCX (который задает межпроцессный сеанс с определенным GUID сеанса) для совместного использования одного ползунка в пользовательском интерфейсе тома.

1 голос
/ 15 июля 2009

Я думаю, что интерфейс ISimpleAudioVolume должен делать то, что вам нужно.
У него есть метод GetMasterVolume, который возвращает громкость аудио сеанса.
Чтобы получить интерфейс, вы можете вызвать IAudioSessionManager :: GetSimpleAudioVolume.

В качестве параметра guid вы можете использовать тот, который вы указали при создании аудиопотоков с помощью IAudioClient :: Initialize. Честно говоря, я не знаю, есть ли другие способы получить руководство для сеанса.

Параметр группировки - это идентификатор группы, которой принадлежит сеанс, а не идентификатор сеанса.

...