Параметры группировки
Параметр группировки определяет коллекцию звуковых сеансов, которые управляются одним регулятором громкости в системной программе управления громкостью, Sndvol. Параметр группировки — это GUID, который однозначно идентифицирует коллекцию в пределах области компьютера.
Назначение параметра группировки схоже с назначением GUID для межпроцессного сеанса. То есть параметр группировки позволяет пользователю управлять коллекцией потоков из любого количества процессов в виде одной единицы. Однако параметр группировки служит этой цели в случаях, когда межпроцессные сеансы не могут предоставить решение.
Если несколько клиентов назначают свои потоки отдельным сеансам, но присваивают один параметр группировки всем сеансам, Sndvol отображает единичный элемент управления громкостью для этих сеансов. Чтобы обеспечить поддержку группирования параметров, Sndvol или любому аналогичному приложению управления громкостью необходимо выполнить следующие действия:
- Перед отображением регуляторов громкости проверьте параметры группировки всех активных сеансов. Объединить под единым элементом управления громкостью все сессии с одинаковым параметром группировки.
- Когда пользователь изменяет настройку регулятора громкости для определенного параметра группировки, обновите уровни громкости всех сеансов, которые используют этот параметр группировки.
Параметры группировки способствуют уменьшению числа регуляторов громкости, отображаемых Sndvol. Пользователи могут запутаться, если Sndvol перегружает свое отображение слишком большим количеством элементов управления. Без поддержки параметров группировки Sndvol всегда будет отображать отдельный элемент управления громкостью для каждого сеанса, что может быть неуместным в некоторых ситуациях. Кроме того, параметры группировки предоставляют удобный способ обеспечить, чтобы сеансы, содержащие похожие типы звукового содержимого, можно легко задать одинаковый уровень громкости.
Как описано ранее, высокоуровневые аудио API обычно назначают потоки сеансу по умолчанию, специфичному для процесса (идентифицируемому значением GUID сеанса GUID_NULL). По умолчанию Sndvol позволяет отображать отдельный регулятор громкости для каждого процесса клиентского приложения, что часто является предпочтительным. Кроме того, если несколько экземпляров одного клиента выполняются в отдельных процессах, но требуют единого, совместного управления громкостью, клиенты могут просто назначать потоки одному межпроцессному сеансу. Ни в чем из этих случаев не требуется использовать параметры группировки. Тем не менее, один важный случай, как пример Microsoft Internet Explorer, требует использования параметров группировки для достижения требуемого поведения.
Internet Explorer позволяет пользователям открывать несколько окон браузера, и эти окна могут не выполняться в одном процессе. Пользователи могут запутаться, если в Sndvol отображался отдельный регулятор громкости для каждого экземпляра приложения, все из которых имели одинаковую метку "Internet Explorer". Межпроцессный сеанс не является целесообразным решением в этом случае — если несколько экземпляров Internet Explorer выполняются в разных процессах, они могут не суметь назначить все свои звуковые потоки одному межпроцессному сеансу. Причина в том, что окна Internet Explorer могут запускать экземпляры проигрывателя Windows Media или другого мультимедийного подключаемого модуля, использующего API звука более высокого уровня для воспроизведения аудиопотоков. Эти API обычно назначают потоки в процессе для сеанса, соответствующего конкретному процессу, по умолчанию. Internet Explorer не контролирует назначение этих потоков сеансам.
WASAPI решает эту проблему, предоставляя каждому экземпляру Internet Explorer возможность доступа к элементам управления сеансом по умолчанию, специфично для процесса, и назначение параметра группировки этому сеансу. Если все экземпляры Internet Explorer назначают один и тот же параметр группирования всем их звуковым сеансам, то Sndvol отобразит один элемент управления громкости для этих сеансов.
По умолчанию сеанс не входит в группирование. Если клиент явно не назначает сеанс группе, то Sndvol отображает выделенный регулятор громкости для этого сеанса. Значение параметра группировки GUID_NULL указывает, что сеанс не принадлежит какой-либо группировке. Если клиент явно не назначил параметр группировки сеансу, значение параметра группировки для этого сеанса по умолчанию GUID_NULL.
Клиент может динамически изменять группирование, которому назначен сеанс.
Группирование может включать любое сочетание сеансов между процессами и сеансов конкретного процесса на устройстве аудиовыхода .
Пользовательский интерфейс Sndvol позволяет пользователю одновременно отображать элементы управления громкости только для одного устройства аудио конечной точки. Когда пользователь настраивает элементы управления громкостью для определенного устройства, уровни громкости сеансов, которые подключаются к другим устройствам, не затрагиваются. В частности, элемент управления томом для определенного параметра группировки влияет только на сеансы, которые совместно используют параметр группировки и подключены к выбранному устройству. Сеанс с идентичным параметром группировки, но подключенный к другому устройству, не затрагивается.
Как описано ранее, Sndvol снабжает каждый отображаемый элемент управления громкостью именем и значком. В случае элемента управления томом для группировки Sndvol случайным образом выбирает один из сеансов в группировке в качестве источника отображаемого имени и значка, отображаемого с помощью элемента управления томом. Таким образом, чтобы Sndvol всегда отображал одинаковое отображаемое имя и значок для группировки, все экземпляры приложений, которые назначают сеансы этой группировке, должны убедиться, что их соответствующие сеансы имеют одинаковое отображаемое имя и значок. Дополнительные сведения об отображаемых именах и значках см. в разделе сеансов аудио.
Приложение, например Sndvol, может зарегистрировать себя для получения уведомлений при изменении параметра группировки для сеанса. Такие уведомления могут быть полезны, если приложение кэширует сведения о назначении сеансов для группирования параметров. Уведомление сообщает приложению, что кэшированные сведения больше не будут допустимыми.
Чтобы назначить параметр группировки сеансу, вызовите метод IAudioSessionControl::SetGroupingParam. Чтобы получить параметр группировки, назначенный сеансу, вызовите метод IAudioSessionControl::GetGroupingParam.
Связанные разделы