Сопоставление форматов потоков с конфигурациями динамиков
При появлении запроса на воспроизведение формата потока, который не соответствует конфигурации динамиков звукового устройства, звуковой драйвер имеет несколько вариантов:
Отклонить воспроизведение потока.
Воспроизведение потока путем сопоставления отдельных каналов с динамиками. Если какие-либо каналы остались после сопоставления канала с каждым динамиком, удалите оставшиеся каналы. И наоборот, если какие-либо ораторы остаются после того, как все каналы были назначены ораторам, играть тишину через оставшихся динамиков.
Воспроизведение потока путем смешивания каналов в исходном потоке для точного создания количества каналов, необходимых для конфигурации динамиков. Если в исходном потоке больше каналов, чем динамиков, такой подход позволяет избежать потери содержимого, которое будет вызвано простой отменой лишних каналов. Смешивание и преобразование формата можно выполнять в программном или аппаратном обеспечении.
Что касается третьего варианта, драйвер должен избегать прямого смешивания программного обеспечения. Вместо этого поставщик оборудования должен установить программный модуль глобальных эффектов (GFX) для обработки потока, прежде чем он достигнет звукового устройства. В Windows Vista глобальные эффекты реализуются как объекты обработки звука (APOs) GFX. В Windows Server 2003 и Windows XP глобальные эффекты были реализованы в виде фильтров GFX.
Воспроизведение потокового потока 5.1 канала в конфигурации динамиков 7.1
На следующем рисунке показан поток, записанный для конфигурации динамиков объемного звука 5.1 (слева), но воспроизводимый через конфигурацию динамиков домашнего кинотеатра 7.1 (справа).
На предыдущем рисунке записанный формат 5.1 не содержит сведения о канале для позиций говорящего BL и BR в конфигурации динамиков 7.1. Таким образом, эти два оратора молчат. (Другой, более сложной альтернативой было бы для звукового устройства синтезировать два дополнительных канала для bl и BR динамиков путем смешивания содержимого из исходных шести каналов в записи.)
Согласно определениям битов маски канала, маска канала для записи потока 5.1, показанная в левой части предыдущего рисунка, должна быть 0x60F, которая назначает шесть каналов следующим позициям говорящего: FL, FR, FC, LFE, SL и SR. (Это конфигурация бокового докладчика 5.1, описанная выше.) На самом деле маска канала для потока 5.1 0x3F, а не 0x60F по причинам, которые были упомянуты ранее и теперь будут подробно объяснены.
В более ранних версиях Windows (Windows Server 2003, Windows XP с пакетом обновления 1 (SP1), Windows 2000 и Windows Me/98) интерпретация маски канала 0x3F заключается в том, что она назначает шесть каналов в формате 5.1 следующим позициям говорящего: FL, FR, FC, LFE, BL и BR. (Это конфигурация заднего динамика 5.1.) Однако интерпретация в Windows Vista, Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2) отличается: по соглашению формат 5.1 с маской канала 0x3F интерпретируется как конфигурация бокового динамика 5.1 вместо конфигурации заднего динамика 5.1.
Интерпретация маски канала таким образом устраняет необходимость ввести второй дескриптор формата 5.1 для отличия конфигурации бокового динамика 5.1 от конфигурации заднего динамика 5.1. Эти две конфигурации настолько похожи, что типичные пользователи могут испытывать трудности при их различии. Хотя наличие только одного дескриптора формата 5.1 канала позволяет избежать путаницы пользователей, поставщики оборудования должны помнить интерпретировать маску 0x3F канала, чтобы означать, что каналы 5 и 6 назначаются позициям динамиков SL и SR вместо позиций BL и BR. В обмен на необходимость вспомнить эту интерпретацию маски канала для потока 5.1, поставщики могут избавить пользователей от трудностей различения двух очень похожих дескрипторов формата 5.1.
Поставщики, которые считают, что по крайней мере некоторые из пользователей могут захотеть различать конфигурацию бокового динамика 5.1 и конфигурацию заднего динамика 5.1, могут предоставить для этой цели программу пользовательского интерфейса. С помощью пользовательского интерфейса пользователи могут выбрать, должны ли каналы 4 и 5 в потоке 5.1 управлять задними динамиками, а не боковыми динамиками в конфигурации динамиков домашнего кинотеатра 7.1.
Воспроизведение 7.1-канального потока в конфигурации динамиков 5.1
На следующем рисунке показан поток, записанный для конфигурации 7.1 динамиков домашнего кинотеатра (слева), воспроизводимой через конфигурацию 5.1 для динамиков объемного звука (справа). Маска канала для потока 7.1 канала 0x63F.
В этом примере каналы 6 и 7, которые содержат данные о позициях бокового говорящего в конфигурации 7.1, играют через позиции бокового динамика в конфигурации 5.1. Звуковое устройство просто удаляет каналы 4 и 5, которые содержат данные о положении заднего динамика в конфигурации 7.1 при воспроизведении потока в конфигурации 5.1. Как упоминалось ранее, другой альтернативой (не показанной на предыдущем рисунке) является попытка устройства сохранить содержимое в каналах 4 и 5, смешивая их с каналами 6 и 7, прежде чем воспроизводить их через боковые динамики в конфигурации 5.1.
Поведение системного микшера
В Windows Server 2003, Windows XP, Windows 2000 и Windows Me/98 многоканальные звуковые потоки, воспроизводимые звуковым устройством, обычно создаются программным системным микшером, Kmixer.sys. Прежде чем поток начнет воспроизводиться, системный миксер и аудиодрайвер должны согласовать формат потока, который может обрабатываться как микшером, так и драйвером.
При появлении запроса на воспроизведение многоканального потока в формате, который не соответствует конфигурации динамиков звукового устройства, звуковой драйвер может отклонить запрос, в этом случае согласование продолжается.
Системный микшер может преобразовывать содержимое из входного потока 5,1 канала в 7,1-канальный выходной поток (на звуковое устройство), и наоборот, хотя он предпочитает избегать таких преобразований, чтобы сохранить качество входного потока. Таким образом, системный миксер начинает согласование с запроса драйвера принять поток с тем же форматом, что и входной поток самого высокого качества для системного микшера. Как правило, это означает, что если системный микшер имеет входной поток в формате 5.1- или 7.1-канальный, он запрашивает у драйвера принять поток в том же формате. Если драйвер отклоняет этот формат, системный микшер продолжает переговоры, спрашивая драйвер, может ли он обрабатывать другие форматы потоков.
Например, если драйвер для звукового устройства с конфигурацией динамиков 5.1 отклоняет запрос от системного микшера на воспроизведение потока 7,1 канала, системный миксер продолжает согласование, предлагая преобразовать поток 7.1 в поток 5.1 канала. Если драйвер принимает этот формат, системный миксер выполняет преобразование потока для драйвера.
При проектировании звукового драйвера средство записи драйвера должно решить, следует ли обрабатывать собственные преобразования формата или полагаться на системный микшер для выполнения преобразований. Драйверу может потребоваться обработать преобразования в любой из следующих ситуаций:
Если драйвер требует, чтобы преобразование выполнялось способом, отличающимся от преобразования, выполняемого системным микшером.
Если драйвер должен воспроизводить потоки, которые обходят системный микшер.
Во второй ситуации поток может обойти системный микшер, если воспроизводится из буфера с аппаратным ускорением Microsoft DirectSound непосредственно на аппаратном микшере на звуковом устройстве. Кроме того, некоторые приложения pro audio отправляют свои потоки непосредственно на звуковое устройство, чтобы избежать задержки системного микшера или предотвратить изменение цифровых значений образца в исходном аудиопотоке в процессе микширования.
В Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2), если системный микшер создает поток вывода 5,1 канала, миксер всегда устанавливает маску канала потока на 0x3F. Системный микшер ведет себя таким образом, даже если он получает 5,1-канальный входной поток с маской канала 0x60F. При таком поведении аудиодрайвер никогда не получает 5.1-канальный поток с маской канала 0x60F от микшера.
Если системный микшер получает 7,1-канальный входной поток с маской канала 0x63F и создает 5,1-канальный выходной поток (с маской канала 0x3F), микшер копирует каналы 6 и 7 во входном потоке в каналы 4 и 5 в выходном потоке. Микшер удаляет каналы 4 и 5 (для двух задних динамиков) из 7.1-канального входного потока. Это гарантирует, что каналы, содержащие содержимое для двух боковых динамиков в потоке 7.1 канала, будут воспроизводиться через боковые динамики в конфигурации динамиков 5.1.