Поделиться через


Аудиосеансы

Звуковой сеанс — это группа связанных аудиопотоков, которым клиент WASAPI может совместно управлять. Клиенты могут управлять уровнем тома и отключенным состоянием каждого отдельного сеанса. Система применяет заданный клиентом том и параметры отключения единообразно ко всем потокам в сеансе.

Когда клиент инициализирует аудиопоток, он назначает аудиопоток сеансу. Дополнительные сведения см. в разделе IAudioClient::Initialize.

Звуковой сеанс содержит потоки отрисовки или потоки записи, но не оба. По умолчанию параметры тома и выключения сеанса отрисовки сохраняются во время перезапуска системы. Параметры тома и отключения для сеанса записи не сохраняются. (Сеанс, содержащий потоки, работающие в режиме обратного цикла, обрабатывается так же, как сеанс захвата. То есть параметры сеанса не сохраняются. Дополнительные сведения о режиме обратного вызова см. в разделе "Запись loopback".)

Каждый аудиопоток принадлежит ровно одному сеансу. Клиент назначает аудиопоток определенному сеансу во время инициализации объекта потока. Поток сохраняет свое членство в сеансе в течение всего времени существования потока. После создания объекта потока объект существует, пока клиент не освобождает последнюю подсчитываемую ссылку на объект, а затем удаляется объект.

Хотя клиент не может изменить сеанс, которому назначен существующий поток, он может добиться аналогичного эффекта, удалив поток (освобождая все ссылки на него), создавая новый поток для замены удаленного потока и присваивая новый поток другому сеансу.

Каждый сеанс отрисовки представляет подмножество потоков, которые образуют глобальную смесь, которая воспроизводится через определенное устройство аудио конечной точки. Глобальный набор объединяет все сеансы из всех приложений, которые совместно используют устройство.

Часто приложение с несколькими потоками назначает все его потоки одному сеансу. Однако приложение может назначать разные потоки различным сеансам. Любой поток, который приложение не назначает сеансу явно, принадлежит сеансу по умолчанию.

Типичные звуковые приложения должны избежать изменения громкости и отключения параметров для сеансов. Вместо этого пользователи управляют этими параметрами с помощью пользовательских интерфейсов программ управления. Например, в Windows Vista программа, предоставляемая системой, Sndvol.exe, отображает элемент управления томом и отключить его для каждого активного или недавно активного сеанса отрисовки в системе. С помощью этих элементов управления пользователи могут настроить том и отключить параметры для всех сеансов в системе.

Программа Sndvol в настоящее время отображает элементы управления громкости только для устройств конечной точки отрисовки звука. Он не отображает элементы управления громкости для устройств записи звука.

Сеанс активен, если он содержит один или несколько активных потоков. Активный поток находится в состоянии выполнения. Неактивный поток находится в остановленном состоянии. Сеанс становится активным, когда его первый поток становится активным. Сеанс становится неактивным, когда последний активный поток становится неактивным. После того, как сеанс неактивен в течение определенного периода времени, система изменяет состояние сеанса от неактивного до истечения срока действия.

Sndvol отображает элементы управления томом и отключением для всех активных и неактивных сеансов отрисовки. Sndvol удаляет том и отключает элементы управления для сеанса при изменении состояния сеанса от неактивного до истечения срока действия или завершения сеанса. (Сеанс завершается, когда последний из его потоков удаляется; то есть, когда клиент освобождает окончательный счетчик ссылок на последний оставшийся объект потока в сеансе.) Одним из исключений этого правила является системное уведомление звуков. Sndvol всегда отображает громкость и отключить элементы управления для звуков системного уведомления независимо от состояния сеанса для этих звуков.

Как правило, поток принадлежит сеансу, который охватывает только процесс, содержащий приложение, создающее поток. Однако приложения могут определять межпроцессные сеансы, которые объединяют потоки из двух или нескольких процессов.

WASAPI поддерживает межпроцессные сеансы в первую очередь так, чтобы:

  • Программа Sndvol может представить пользователя с одним элементом управления томом для управления звуками системного уведомления во всех приложениях.
  • Проигрыватель мультимедиа, выполняющийся в одном процессе, может передавать защищенное содержимое в программу расшифровки, которая выполняется в другом процессе.

Как и параметры управления для сеансов отрисовки для конкретного процесса, параметры управления для сеансов перекрестной отрисовки по умолчанию сохраняются во время перезапуска системы. WASAPI обеспечивает это поведение в первую очередь для преимущества системных звуков уведомлений, которые должны сохранять громкость пользователя и отключает параметры, так как сочетание приложений меняется со временем.

Программа Sndvol помечает элемент управления томом для каждого сеанса с отображаемым именем и значком. Клиент имеет возможность явно назначить отображаемое имя и значок сеансу. Если клиент не предоставляет эти элементы, вместо него отображается имя по умолчанию и значок по умолчанию. Имя по умолчанию включает такие сведения, как название окна приложения. Значок по умолчанию — это значок окна приложения. Только в случае сеансов, относящихся к процессу, эти значения по умолчанию предоставляют пользователям значимые сведения. Обратите внимание, что межпроцессный сеанс может быть связан с несколькими приложениями. В этом случае понятно только отображаемое имя клиента и значок.

Хотя параметры тома и выключения сеанса отрисовки по умолчанию сохраняются во всех перезапусках системы, отображаемое имя и значок клиента не отображаются. Чтобы убедиться, что Sndvol отображает указанное клиентом имя и значок, клиент должен явно назначить имя и значок сеансу во время назначения первого потока сеансу. Система сохраняет отображаемое имя и значок сеанса только до завершения сеанса.

Каждый сеанс определяется идентификатором GUID сеанса. В то время, когда клиент открывает поток, клиент назначает этот поток определенному сеансу. Клиент предоставляет следующие два фрагмента информации для идентификации этого сеанса:

  • GUID сеанса.
  • Независимо от того, является ли сеанс межпроцессным или конкретным сеансом, сеанс, зависящий от процесса, содержит только потоки из процесса клиента.

Эта информация достаточно для различения определенного сеанса от всех остальных сеансов на одном компьютере. ИДЕНТИФИКАТОР GUID сеанса для сеанса, относящееся к процессу, однозначно определяет сеанс только в пределах область процесса, который владеет сеансом. Напротив, GUID сеанса для межпроцессного сеанса является уникальным в область всех процессов, выполняемых на компьютере.

В случае сеанса, зависящего от процесса, система использует сочетание GUID сеанса и идентификатора процесса для уникальной идентификации сеанса в область компьютера. Таким образом, если клиенты в двух разных процессах назначают соответствующие потоки двум сеансам с одинаковыми идентификаторами guid сеансов, система обрабатывает сеансы как отдельные, так как их идентификаторы процессов отличаются. Кроме того, если межпроцессный сеанс использует тот же GUID сеанса, что и один или несколько сеансов, система обрабатывает межпроцессный сеанс как отличный от сеансов, зависящих от сеансов, даже если они используют один и тот же GUID сеанса.

Например, в Windows Vista интерфейсы API более высокого уровня, такие как функции Windows мультимедиа waveOutXxx и DirectSound, обычно назначают аудиопотоки, создаваемые по умолчанию, сеансы, определенные значением GUID сеанса GUID_NULL. Для клиентов этих API сеанс по умолчанию для каждого клиентского процесса отличается от сеансов по умолчанию для других клиентских процессов, даже если сеансы имеют идентичные идентификаторы GUID сеансов. Кроме того, если одно или несколько приложений назначают потоки межпроцессному сеансу, определяемого значением GUID сеанса GUID_NULL, система обрабатывает этот межпроцессный сеанс как отдельный от сеанса по умолчанию, которые используют один и тот же GUID сеанса сеанса. Соответственно, программа Sndvol отображает отдельный элемент управления томом для каждого сеанса по умолчанию, для каждого клиента, а также отображает дополнительный элемент управления томом для сеанса межпроцессного процесса, который определяется значением GUID сеанса GUID_NULL, если этот сеанс существует.

Каждый сеанс связан только с одним устройством аудио конечной точки. Если два сеанса имеют идентичные ИДЕНТИФИКАТОРы сеансов и идентификаторы процессов, но связаны с разными устройствами, система обрабатывает два сеанса как отдельные. Сеанс никогда не может содержать потоки записи и отрисовки, так как поток записи может быть связан только с устройством записи, а поток отрисовки может быть связан только с устройством отрисовки.

Как упоминание ранее, параметры тома и отключения звука для сеанса сохраняются во время перезагрузки системы. Два или более экземпляров приложения могут создавать сеансы, относящиеся к процессу, с одинаковыми идентификаторами GUID сеансов. С помощью программы Sndvol пользователь может выбрать разные параметры тома и отключить параметры для каждого из этих сеансов. После завершения этих сеансов система сохраняет параметры управления только одного из этих сеансов — последний сеанс для завершения. Позже, если новый экземпляр приложения создает сеанс, зависящий от процесса, с тем же ИДЕНТИФИКАТОРом сеанса, что и раньше, этот сеанс наследует ранее сохраненный том и отключает параметры.

Приложение не должно пытаться добавить поток или управлять уровнем тома сеанса, принадлежащим другому, не связанному приложению. Кроме того, приложение не должно пытаться контролировать уровень громкости сеанса, управляемого системой, для звуков уведомлений. Однако приложение может воспроизводить звук через системный сеанс для звуков уведомлений, вызвав функцию PlaySound . Дополнительные сведения см. в разделе "Звуки уведомлений" для устаревших звуковых приложений.

Приложение может зарегистрироваться для получения уведомлений при изменении состояния сеанса. Дополнительные сведения см. в разделе "События сеанса звука".

В редких случаях приложению, создающее сеанс для конкретного процесса, может потребоваться консолидировать управление сеансами, зависящими от процесса, для двух или нескольких экземпляров приложений под одним элементом управления томом в Sndvol. Дополнительные сведения см. в разделе "Параметры группировки".

Руководство по программированию