Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлен обзор Bluetooth LE Audio, представленный в Windows 11 версии 22H2 (KB5026446).
Введение
Bluetooth LE Audio позволяет передавать звук в режиме одноадресной или широковещательной передачи на устройства Bluetooth LE по изохронному каналу связи. По состоянию на версию 5.3 спецификации ядра Bluetooth, для платформ хостов нет стандарта, определяющего интерфейс хост-контроллера (HCI) для отправки и получения изохронных данных в контроллер Bluetooth и из него. В этом документе определяется зависящий от поставщика звуковой путь Windows Bluetooth (VSAP), который позволяет платформам использовать решения поставщика для поддержки потоковой передачи Bluetooth LE Audio. В программном интерфейсе VSAP используются расширения аудиоклассов Windows (ACX) и другие свойства интерфейса, определенные в этом документе.
Терминология и предварительные требования
Помимо терминов, определенных в этой таблице, этот документ также ссылается на термины, определенные расширениями аудиоклассов Windows.
| Срок | Определение |
|---|---|
| Аудио LE | Сокращение для Bluetooth LE Audio |
| Классический звук | Потоковая передача звука Bluetooth, использующая профиль без рук (HFP) и расширенный профиль распространения звука (A2DP) |
| Звуковое устройство | Одно удаленное устройство Bluetooth LE Audio или набор устройств Bluetooth LE Audio, которые вместе составляют одну конечную точку звука с точки зрения Windows. |
| BAP | Базовый звуковой профиль определяет, как устройства могут распространять и использовать звук с помощью коммуникаций Bluetooth Low Energy (LE). |
| TMAP | Профиль телефонии и мультимедиа указывает конфигурации взаимодействия служб и профилей аудио на более низком уровне. |
| ASCS | Служба управления аудиопотоками определяет стандартный способ настройки и установки одноадресных аудиопотоков Bluetooth LE Audio. |
| Система архивации и передачи изображений (PACS) | Служба "Опубликованные возможности звука" определяет стандартный способ для устройств Bluetooth LE Audio, чтобы сообщить о поддерживаемых возможностях аудиокодека. |
| СНГ | Транспорт протокола Connected Isochronous Streams используется для отправки и получения однонаправленных аудиоданных между устройствами Bluetooth LE. |
| BIS | Транспорт вещательного исохронного потока используется для передачи звуковых данных без установления соединения. |
| ACX | Короткое время для расширений класса аудио, который является моделью драйвера, необходимой для поддержки Bluetooth LE Audio в Windows. |
| Каналы потоковой передачи | Один или несколько объектов ACXCIRCUIT , созданных стеком драйвера аудио поставщика для потоковой передачи. |
| Канал профиля | Объект ACXCIRCUIT , созданный реализацией звукового профиля Bluetooth LE в Windows. Этот ACXCIRCUIT не является каналом потоковой передачи. |
В этой статье предполагается знакомство с ранее определенными терминами и следующими командами HCI, определенными в спецификации Bluetooth Core:
- Команды локального контроллера
- HCI_Read_Local_Supported_Codecs (версия 2)
- HCI_Read_Local_Supported_Codec_Capabilities
- HCI_LE_Setup_ISO_Data_Path
- HCI_LE_Remove_ISO_Data_Path
- HCI_Configure_Data_Path
- Команды потоковой передачи юниадресной рассылки
- HCI_LE_Set_CIG_Parameters
- HCI_LE_Create_CIS
- HCI_LE_Remove_CIG
- Команды потоковой передачи трансляции
- HCI_LE_Create_BIG
- HCI_LE_Terminate_BIG
- HCI_LE_BIG_Create_Sync
- HCI_LE_BIG_Terminate_Sync
- HCI_LE_Set_Periodic_Advertising_Parameters
- HCI_LE_Set_Periodic_Advertising_Data
- HCI_LE_Set_Periodic_Advertising_Enable
- HCI_LE_Periodic_Advertising_Create_Sync
- HCI_LE_Periodic_Advertising_Create_Sync_Cancel
- HCI_LE_Periodic_Advertising_Terminate_Sync
- HCI_LE_Set_Periodic_Advertising_Receive_Enable
- HCI_LE_Periodic_Advertising_Report
- HCI_LE_BIGInfo_Advertising_Report
- HCI_LE_Read_Periodic_Advertiser_List_Size
- HCI_LE_Add_Device_To_Periodic_Advertiser_List
- HCI_LE_Remove_Device_From_Periodic_Advertiser_List
- HCI_LE_Clear_Periodic_Advertiser_List
- HCI_LE_Periodic_Advertising_Set_Info_Transfer
- HCI_LE_Periodic_Advertising_Sync_Transfer
- HCI_LE_Set_Default_Periodic_Advertising_Sync_Transfer_Parameters
- HCI_LE_Set_Periodic_Advertising_Sync_Transfer_Parameters
Bluetooth LE Audio VSAP требует, чтобы звуковые драйверы использовали платформу ACX. Внедрение ACX для Bluetooth LE Audio обеспечивает несколько преимуществ, таких как:
- Поддерживает предпочитаемую модель звукового драйвера для Windows в будущем.
- Использует встроенную поддержку ACX для решений аудиофайлов с несколькими стеками без необходимости выделенного DDI между драйверами.
- Не требуется звуковой драйвер IHV для ретрансляции запросов из звуковой системы в стек Bluetooth. Вместо этого ACX может отправлять запросы непосредственно в стек Bluetooth через канал профиля.
Архитектура
Определения
Следующие компоненты участвуют в различных вариантах архитектуры VSAP.
Платформа Windows ACX
Этот компонент позволяет поддерживать конечную точку аудио с несколькими стеками. Для Bluetooth LE Audio компоненты программного обеспечения, составляющие конечную точку звука, являются конкретным поставщиком стека аудиодрайвов и профилем Windows Bluetooth LE Audio.
Стек драйвера звука для конкретного поставщика
Этот компонент, определенный поставщиком, отвечает за отправку и получение данных Bluetooth LE Audio от и до контроллера Bluetooth через аудио интерфейс, определенный поставщиком. Он должен содержать как минимум драйвер потоковой передачи ACX для управления входящими и исходящими звуковыми данными. Дополнительные драйверы ACX могут быть включены, если они необходимы для нескольких каналов аудиоконечной точки ACX. Этот компонент также называется драйвером потоковой передачи IHV ACX в этом документе.
Профиль звука Bluetooth LE
Этот компонент содержит реализацию базового звукового профиля (BAP), профиля управления громкостями и профиля управления микрофоном. Он отвечает за создание элемента управления ACXCIRCUIT для каждого устройства Bluetooth LE Audio или набора устройств, парированных с Windows. Он также сообщает аудиоформаты с удаленного устройства и контроллера Bluetooth, а также управляет состоянием изохронных каналов и групп.
Основной стек Windows Bluetooth
Этот компонент предоставляет интерфейс, позволяющий Профилю звука Windows Bluetooth LE запрашивать поддерживаемые возможности кодека с локального контроллера Bluetooth и управлять состоянием изохронных каналов и групп.
Кодек LC3
Этот вложенный элемент преобразуется между сжатым звуком LC3 и звуком PCM. Он должен поддерживать возможности кодирования и декодирования. Кодек LC3 можно реализовать в программном обеспечении в рамках стека конкретного поставщика аудиодрайвера (VSAP). Кроме того, его можно реализовать в оборудовании как часть звукового контроллера DSP или Bluetooth. Схема упоминает LC3 по имени, так как это стандартный кодек, поддерживаемый Bluetooth SIG. Будущие кодеки и определенные кодеки поставщика, поддерживаемые Windows, также могут быть включены в архитектуру аналогичным образом.
Варианты архитектуры
Архитектура Bluetooth LE Audio VSAP поддерживает различные варианты потоковой передачи.
- Потоковая передача звука Bluetooth LE Audio без разгрузки звука
- Потоковая передача звука Bluetooth LE с выключением звука
- Потоковая передача Bluetooth LE Audio, специфичная для поставщика
На следующих схемах заштрихованные компоненты предоставляются IHV, а незаштрихованные компоненты предоставляются ОС.
Архитектура аудиосвязи Bluetooth LE Без разгрузки звука
Архитектура боковой полосы использует конкретный аудио интерфейс поставщика, чтобы позволить стеку звуковых драйверов отправлять и получать звуковые данные на контроллер Bluetooth. Этот путь к данным отличается от пути данных HCI, используемого для других данных Bluetooth, таких как сигнальные сообщения между клиентом одноадресной рассылки и удаленным сервером одноадресной рассылки. Следующая схема моделирует архитектуру боковой полосы, в которой кодек LC3 размещается в контроллере Bluetooth. Также допустимо, чтобы кодек LC3 размещался в стеке звуковых драйверов, специфичном для поставщика, как часть программного кодирования и декодирования. В этом случае звук, отправляемый контроллеру Bluetooth, будет отформатирован как аудиокадры LC3 вместо звука PCM.
На следующей схеме показана архитектура Bluetooth LE Audio с кодеком LC3 в контроллере Bluetooth.
Следующая диаграмма показывает боковую полосу архитектуры Bluetooth LE Audio с кодеком LC3 в аудиодрайвере.
Архитектура боковой полосы Bluetooth LE Audio с переносом обработки аудио.
Архитектура боковой полосы с разгрузкой звука включает аппаратный компонент аудио DSP для предоставления решения потоковой передачи Bluetooth LE Audio с преимуществами экономии энергии. На следующих схемах показана возможная архитектура с кодеком LC3 в контроллере Bluetooth и кодеком в звуковом DSP.
На следующей схеме показана побочная полоса Bluetooth LE Audio с архитектурой разгрузки аудио и кодеком LC3 в контроллере Bluetooth.
На следующей схеме показана боковая полоса Bluetooth LE Audio с архитектурой разгрузки звука с кодеком LC3 в звуковом DSP.
Архитектура Bluetooth LE Audio, специфическая для поставщика, с поддержкой внутриполосной связи
Архитектура подключения VSAP позволяет пользовательскому конвейеру отправлять и получать данные Bluetooth LE Audio от конкретного поставщика стека звукового драйвера к HCI контроллера Bluetooth. Эта архитектура включает в себя новый компонент "IHV ISO Merging Component". Этот компонент отвечает за управление потоком данных ISO. Если необходимо отправить какие-либо команды HCI, также следует использовать совместно управление потоком команд HCI с Windows Bluetooth Core Stack.
На следующей схеме показана архитектура bluetooth LE Audio для конкретного поставщика.
Подробный дизайн
Требования к формату звука
KSAUDIO_PACKETSIZE_CONSTRAINTS2
Звуковые драйверы ACX IHV необходимы для поддержки свойства KSAUDIO_PACKETSIZE_CONSTRAINTS2. Поддержка этого свойства сокращает время между добавлением аудиоустройства Bluetooth LE в окна и аудиоустройства, которое становится доступным для приложений для потоковой передачи.
Продолжительность аудиокадров
Профили Bluetooth LE Audio позволяют реализации поддерживать потоковую передачу звука с длительностью кадров в 7,5 миллисекундах или 10 миллисекундах. Windows требует, чтобы кодеки, предоставляемые IHVs, поддерживали обе продолжительности кадров. Это требование обеспечивает взаимодействие с устройствами bluetooth LE Audio и качеством сосуществования с другими устройствами Bluetooth LE, подключенными к системе.
Определения режима обработки сигналов
Bluetooth LE Audio поддерживает широкий спектр форматов потоковой передачи для поддержки различных сценариев пользователей. Спецификации BAP и TMAP определяют обязательные поддерживаемые форматы для сертификации. Windows применяет режимы обработки звуковых сигналов , чтобы сопоставить формат, используемый с сценарием, который выполняет система. Звуковые драйверы, поддерживающие Bluetooth LE Audio, должны указывать на поддержку режимов обработки сигналов и форматов в следующей таблице. Кроме того, Bluetooth LE Audio не поддерживает режим обработки необработанных сигналов, поэтому звуковые драйверы не объявляют поддерживаемые форматы для этого режима.
Одноадресная отрисовка форматов аудиопотока и режимов обработки сигналов
Bluetooth LE Audio требует, чтобы одноадресная отрисовка аудиоформатов была объявлена для следующих режимов обработки сигналов:
- По умолчанию (AUDIO_SIGNALPROCESSINGMODE_DEFAULT)
- Этот режим используется для однонаправленных сценариев отрисовки, таких как воспроизведение музыки, уведомления и звук видеоигры.
- Обмен данными (AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS)
- Этот режим используется для двунаправленных сценариев, таких как голосовые звонки.
В следующих таблицах перечислены симметричные форматы для каждого варианта использования и режима обработки сигналов. Поддержка асимметричного формата определяется в стереосистеме super wideband для сценариев голосовой связи.
Форматы звука упорядочены от наиболее предпочтительного до наименее предпочтительного.
Системные звуки, воспроизведение музыки и звук видео игры при подключении к стереоустройству или координированному набору устройств
Режим обработки сигналов: по умолчанию
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 48 кГц | 2 | 16 | 7.5 мс | 96 кб/с | 48_3 |
| 48 кГц | 2 | 16 | 7.5 мс | 80 кб/с | 48_1 |
| 48 кГц | 2 | 16 | 10 мс | 96 кб/с | 48_4 |
| 48 кГц | 2 | 16 | 10 мс | 80 кб/с | 48_2 |
| 32 кГц | 2 | 16 | 7.5 мс | 64 кб/с | 32_1 |
| 32 кГц | 2 | 16 | 10 мс | 64 кб/с | 32_2 |
| 24 кГц | 2 | 16 | 7.5 мс | 48 кб/с | 24_1 |
| 24 кГц | 2 | 16 | 10 мс | 48 кб/с | 24_2 |
Системные звуки, воспроизведение музыки и звук видеоигр при подключении к одному элементу координированного набора (один наушник или слуховой аппарат)
Режим обработки сигналов: по умолчанию
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 48 кГц | 1 | 16 | 7.5 мс | 96 кб/с | 48_3 |
| 48 кГц | 1 | 16 | 7.5 мс | 80 кб/с | 48_1 |
| 48 кГц | 1 | 16 | 10 мс | 96 кб/с | 48_4 |
| 48 кГц | 1 | 16 | 10 мс | 80 кб/с | 48_2 |
| 32 кГц | 1 | 16 | 7.5 мс | 64 кб/с | 32_1 |
| 32 кГц | 1 | 16 | 10 мс | 64 кб/с | 32_2 |
| 24 кГц | 1 | 16 | 7.5 мс | 48 кб/с | 24_1 |
| 24 кГц | 1 | 16 | 10 мс | 48 кб/с | 24_2 |
| 16 кГц | 1 | 16 | 7.5 мс | 32 кб/с | 16_1 |
| 16 кГц | 1 | 16 | 10 мс | 32 кб/с | 16_2 |
Отрисовка голосовой записи, вызовов VOIP или звука видео игры с помощью голосового чата
Режим обработки сигналов: обмен данными
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 32 кГц | 1 | 16 | 7.5 мс | 64 кб/с | 32_1 |
| 32 кГц | 1 | 16 | 10 мс | 64 кб/с | 32_2 |
| 24 кГц | 1 | 16 | 7.5 мс | 48 кб/с | 24_1 |
| 24 кГц | 1 | 16 | 10 мс | 48 кб/с | 24_2 |
| 16 кГц | 1 | 16 | 7.5 мс | 32 кб/с | 16_1 |
| 16 кГц | 1 | 16 | 10 мс | 32 кб/с | 16_2 |
Форматы аудио и режимы обработки сигналов потоковой передачи в юниадресной рассылке
Bluetooth LE Audio требует, чтобы форматы аудиозаписи одноадресной рассылки объявлялись для режима обработки сигналов по умолчанию (AUDIO_SIGNALPROCESSINGMODE_DEFAULT). Список поддерживаемых форматов записи приведен в следующей таблице.
Форматы звука упорядочены от наиболее предпочтительного до наименее предпочтительного.
Записывайте аудио с диктофона, звонки VOIP или звук видеоигр с голосовым чатом
Режим обработки сигналов: по умолчанию
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 32 кГц | 1 | 16 | 7.5 мс | 64 кб/с | 32_1 |
| 32 кГц | 1 | 16 | 10 мс | 64 кб/с | 32_2 |
| 24 кГц | 1 | 16 | 7.5 мс | 48 кб/с | 24_1 |
| 24 кГц | 1 | 16 | 10 мс | 48 кб/с | 24_2 |
| 16 кГц | 1 | 16 | 7.5 мс | 32 кб/с | 16_1 |
| 16 кГц | 1 | 16 | 10 мс | 32 кб/с | 16_2 |
Режимы обработки звуковых сигналов трансляции
Для аудиозаписи Windows Bluetooth LE требуется объявлять форматы звука по умолчанию (AUDIO_SIGNALPROCESSINGMODE_DEFAULT) для режима обработки сигналов по умолчанию.
Windows Bluetooth LE Audio требует, чтобы форматы аудиотрансляции (захвата) объявлялись для режима обработки сигналов по умолчанию (AUDIO_SIGNALPROCESSINGMODE_DEFAULT).
Следующий полный список обязательных поддерживаемых форматов идентичен обеим ролям.
Аудиотранслятор стереотрансляции для системных звуков, воспроизведения музыки и видео-игры
Режим обработки сигналов: по умолчанию
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 48 кГц | 2 | 16 | 7.5 мс | 96 кб/с | 48_3 |
| 48 кГц | 2 | 16 | 7,5 мс | 80 кб/с | 48_1 |
| 48 кГц | 2 | 16 | 10 мс | 96 кб/с | 48_4 |
| 48 кГц | 2 | 16 | 10 мс | 80 кб/с | 48_2 |
| 24 кГц | 2 | 16 | 7,5 мс | 48 кб/с | 24_1 |
| 24 кГц | 2 | 16 | 10 мс | 48 кб/с | 24_2 |
Потоковая трансляция Mono для системных звуков, воспроизведения музыки и звука видеоигр
Режим обработки сигналов: по умолчанию
| Частота выборки | Число каналов | Битовая глубина | Длительность кадра | Скорость звуковых данных | Идентификатор конфигурации кодека BAP (таблица 3.11 спецификации BAP) |
|---|---|---|---|---|---|
| 48 кГц | 1 | 16 | 7,5 мс | 96 кб/с | 48_3 |
| 48 кГц | 1 | 16 | 7,5 мс | 80 кб/с | 48_1 |
| 48 кГц | 1 | 16 | 10 мс | 96 кб/с | 48_4 |
| 48 кГц | 1 | 16 | 10 мс | 80 кб/с | 48_2 |
| 24 кГц | 1 | 16 | 7,5 мс | 48 кб/с | 24_1 |
| 24 кГц | 1 | 16 | 10 мс | 48 кб/с | 24_2 |
| 16 кГц | 1 | 16 | 7,5 мс | 32 кб/с | 16_1 |
| 16 кГц | 1 | 16 | 10 мс | 32 кб/с | 16_2 |
Определенные конфигурации потоков и топологии
Конфигурации только для отрисовки юниадресной рассылки
Базовая конфигурация звукового профиля 1
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, поддерживающему монопотоки. Одно устройство может быть автономным или одним подключенным членом координированного набора.
| Примеры вариантов использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Воспроизведение мультимедиа |
Отрисовка: Режим обработки сигналов: по умолчанию Число каналов: 1 Запись: Нет |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: высокая надежность |
| Голосовой звонок без микрофона на звуковом устройстве |
Отрисовка: Режим обработки сигналов: обмен данными Число каналов: 1 Запись: Нет |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
| Воспроизведение видеоигр |
Отрисовка: Режим обработки сигналов: по умолчанию Число каналов: 1 Запись: Нет |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 4
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, который поддерживает стереопотоки. Звуковое устройство может обрабатывать два аудиоканала на одном CIS.
| Примеры вариантов использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Воспроизведение мультимедиа |
Рендеринг: режим обработки сигнала: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: высокая надежность. Распределение аудиоканалов: передний левый и передний правый. |
| Воспроизведение видеоигр | Режим обработки сигналов: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка Распределение аудиоканалов: передний левый и передний правый |
Базовая конфигурация профиля аудио 6(i)
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, который поддерживает стереопотоки. Звуковое устройство может обрабатывать только один звуковой канал на каждом из двух CIS
| Примеры вариантов использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Воспроизведение мультимедиа | Режим обработки сигналов: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: высокая надежность |
| Голосовой звонок без микрофона на звуковом устройстве | Режим обработки сигналов: обмен данными Число каналов: 1 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка Распределение аудиоканалов: передний левый или передний правый |
| Воспроизведение видеоигр | Режим обработки сигналов: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка Распределение аудиоканалов: передний левый и передний правый |
Базовая конфигурация звукового профиля 6(ii)
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к координированному набору звуковых устройств. Набор может обрабатывать два канала звука с каждым элементом, обрабатывая один канал.
| Примеры вариантов использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Воспроизведение мультимедиа | Режим обработки сигналов: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: высокая надежность |
| Голосовой звонок без микрофона на любом устройстве | Режим обработки сигналов: обмен данными Число каналов: 1 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
| Воспроизведение видеоигр | Режим обработки сигналов: по умолчанию Число каналов: 2 Запись: Нет |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Двунаправленные конфигурации юниадресной рассылки
Двунаправленные конфигурации используются, когда профиль Bluetooth LE Audio обнаруживает, что приложение намерено создавать поток записи и отрисовки на удаленном устройстве или наборе устройств. Управление захватом и отображением потоков приложений отдельно. Таким образом, звуковые драйверы IHV и контроллеры Bluetooth должны разрешать передачу звука через одно направление двунаправленного CIS после подготовки. В этой подготовке используются команды HCI configure Data Path and LE Setup ISO Data Path.
Базовая конфигурация звукового профиля 3
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству с двунаправленным монопотоком, передающимся через один CIS.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Голосовой звонок |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 1 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
| Воспроизведение видеоигр с помощью голосового чата |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 1 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 8(i)
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, которое поддерживает потоки стереовоспроизведения и потоки монофонической записи. Устройство может обрабатывать один канал звука в одном формате CIS для заданного направления.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Голосовой звонок |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 1 или 2 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
| Воспроизведение видеоигр с помощью голосового чата |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 2 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 8(ii)
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к координированному набору звуковых устройств. Каждый элемент набора получает один канал воспроизведения звука. Один элемент набора имеет установленный поток захвата. Элемент набора с потоком записи является первым элементом набора, который подключается к компьютеру, который также поддерживает потоки записи.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Голосовой звонок |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 1 или 2 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
| Воспроизведение видеоигр с помощью голосового чата |
Передавать: Режим обработки сигналов: обмен данными Число каналов: 2 Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Конфигурации только для записи в юниадресной рассылке
Базовая конфигурация звукового профиля 2
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, поддерживающим потоки монозахвата.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Голосовой звонок без динамиков на устройстве |
Передавать: Никакой Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 1 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 9(i)
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к одному звуковому устройству, который поддерживает отправку стереофонического звука. Устройство может кодировать один канал звука на одном CIS.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Многоканальная запись микрофона |
Передавать: Никакой Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 9(ii)
Компьютер подключен к одному звуковому устройству, поддерживающим потоки монозахвата.
Следующая конфигурация звука определена в таблице 4.1 спецификации Bluetooth BAP.
Компьютер подключен к набору звуковых устройств. Каждый элемент набора отправляет один канал звука на компьютер.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Многоканальная запись микрофона |
Передавать: Никакой Захват: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число CIS: 2 Число CIG: 1 Параметры качества обслуживания BAP: низкая задержка |
Если удаленный набор устройств или набор устройств поддерживает двунаправленный звук, конфигурация только потока записи совпадает с двунаправленным. Эта конфигурация позволяет переходить из сценариев записи только в двунаправленные сценарии без необходимости повторного создания потоков.
Конфигурации источника широковещательной трансляции
Базовая конфигурация звукового профиля 12
Следующая конфигурация звука определена в таблице 4.2 спецификации Bluetooth BAP.
Компьютер вещает один канал моно аудио.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Системные звуки, воспроизведение музыки |
Передавать: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число BIS: 1 BIG Count: 1 Параметры качества обслуживания BAP: высокая надежность |
| Звук видео игры |
Передавать: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число BIS: 1 BIG Count: 1 Параметры качества обслуживания BAP: низкая задержка |
Базовая конфигурация звукового профиля 13
Следующая конфигурация звука определена в таблице 4.2 спецификации Bluetooth BAP.
Компьютер вещает стереофонический звук с каждым каналом, передаваемым по собственному БИС.
| Вариант использования | Параметры звука Windows | Параметры контроллера Bluetooth |
|---|---|---|
| Системные звуки, воспроизведение музыки |
Передавать: Режим обработки сигналов: по умолчанию Число каналов: 2 |
Число BIS: 1 BIG Count: 1 Параметры качества обслуживания BAP: высокая надежность |
| Звук видео игры |
Передавать: Режим обработки сигналов: по умолчанию Число каналов: 1 |
Число BIS: 1 BIG Count: 1 Параметры качества обслуживания BAP: низкая задержка |
Структуры данных
Компания Microsoft определила свойства интерфейса Bluetooth LE Audio.
Свойства создания стрима
Следующие свойства используются для конкретного поставщика стека звуковых драйверов и профиля звука Bluetooth LE через DDISACXOBJECTBAG. Эти свойства сообщают решения о создании и настройке конечной точки потока, как показано в сценарии создания потока .
BluetoothLEAudio_CodecCapabilities
Звуковой драйвер задает это свойство, чтобы указать поддержку возможностей потоковой передачи звука, поддерживаемых в звуковом драйвере или звуковом DSP. Значение свойства задается с помощью DDI AcxObjectBagAddBlob , а формат значения совпадает с записью PAC, как определено в спецификации PACS.
Профиль Windows Bluetooth LE Audio считывает свойство, чтобы определить возможные конфигурации кодека и потоковую структуру для использования.
| Поле | Октет |
|---|---|
| Число возможностей | 0 |
| Идентификатор кодека[i] | 1-6 |
| Длина специфических возможностей кодека[i] | 7 |
| Специфические возможности кодека | 8... n |
| Длина метаданных (m) | n + 1 |
| Метаданные | n+2... m |
Значения полей определяются в таблицах 3.2 и 3.4 спецификации PACS.
Bluetooth_DatapathID
Звуковой драйвер задает это свойство, чтобы указать идентификатор пути к данным, используемый в качестве параметра для команд HCI_LE_Setup_ISO_Data_Path и HCI_Configure_Data_Path. Значение свойства задается с помощью DDI AcxObjectBagAddUI8 .
Профиль Bluetooth LE Audio считывает и использует это свойство в качестве параметра в командах HCI_Configure_Data_Path и HCI_LE_Setup_ISO_Data_Path. Данный идентификатор применяется ко всем изохронным потокам, определенным для ACXSTREAM, связанного с контейнером объектов. Чтобы назначить другой идентификатор пути к данным для каждого подключения к потоку, используйте KSPROPERTY_BtLeAudio_DATAPATH_ID в звуковых драйверах.
| Поле | Октет |
|---|---|
| Идентификатор пути к данным | 0 |
Если звуковой драйвер не задает это свойство, ОС использует значение 1 в качестве параметра для команд HCI.
Bluetooth_КонфигурацияПутиДанных
Звуковой драйвер задает это свойство для предоставления конкретных конфигураций поставщику контроллеру Bluetooth с помощью команды HCI_Configure_Data_Path. Он не должен превышать 255 байт, что является самой большой полезной нагрузкой, которую контроллер Bluetooth принимает для команды HCI. Значение свойства задается с помощью DDI AcxObjectBagAddBlob . Эта конфигурация применяется ко всем идентификаторам пути данных, заданным звуковым драйвером. Чтобы назначить другую конфигурацию пути к данным для каждого идентификатора datapath, используйте KSPROPERTY_BtLeAudio_DATAPATH_CONFIG в звуковых драйверах.
Bluetooth_RequiresHciTransportInD0ForStreaming
Звуковой драйвер задает это свойство, чтобы указать, что контроллер Bluetooth не должен переходить в состояние низкой мощности в то время как аудиопоток активен. Значение свойства задается с помощью DDI AcxObjectBagAddUI8 .
| Поле | Октет |
|---|---|
| ActiveTransportRequired (должно иметь значение 1) | 0 |
BluetoothLEAudio_CodecConfiguration
Это свойство должно быть задано профилем Bluetooth LE Audio с помощью DDI AcxObjectBagAddBlob после настройки конфигурации кодека с звуковым устройством. Структура значения:
| Поле | Октет |
|---|---|
| Число конфигураций | 0 |
| Дескриптор подключения Stream[i] | 1-2 |
| Формат кода[i] | 3 |
| Идентификатор компании[i] | 4-5 |
| Идентификатор кодека от конкретного поставщика[i] | 6-7 |
| Длина конкретной конфигурации кодека[i] | 8 |
| Специфическая конфигурация кодека[i] | 9... n |
Значения полей являются производными от таблицы 4.3 спецификации службы управления аудиопотоками Bluetooth.
Стек аудиодрайвера, специфичный для поставщика, должен прочитать это свойство, если кодек LC3 находится в драйвере потоковой передачи ACX или в звуковом DSP.
BluetoothLEAudio_StreamConnectionHandles
Это свойство должно быть задано профилем звука Bluetooth LE, чтобы сообщить звуковому драйверу списка дескрипторов BIS или CIS, созданных для BIG или CIG. Порядок дескрипторов соответствует заказу, возвращаемого контроллером Bluetooth, команде HCI LE_Set_CIG_Parameters или LE_Create_BIG_Complete события HCI. Структура значения:
| Поле | Size | Октет |
|---|---|---|
| Число дескрипторов подключений | 1 | 0 |
| Дескриптор подключения[i] | 2 | 1-n |
Свойства Bluetooth LE Audio KS
Свойства KS позволяют звуковому драйверу IHV ACX задавать или обновлять параметры аудиопотока после создания потока. Этот сценарий полезен для настройки параметров конфигурации на основе свойств, заданных каналом профиля Bluetooth в процедуре создания потока.
Определения
#define STATIC_KSPROPSETID_BtLeAudio\
0x1159b79, 0xea6, 0x4923, 0x80, 0xf5, 0x32, 0x58, 0xd1, 0xfd, 0x91, 0x56
DEFINE_GUIDSTRUCT("01159B79-0EA6-4923-80F5-3258D1FD9156", KSPROPSETID_BtLeAudio);
#define KSPROPSETID_BtLeAudio DEFINE_GUIDNAMED(KSPROPSETID_BtLeAudio)
typedef enum {
KSPROPERTY_BtLeAudio_DATAPATH_ID,
KSPROPERTY_BtLeAudio_DATAPATH_CONFIG,
} ksproperty_btleaudio;
KSPROPERTY_BtLeAudio_DATAPATH_ID
Это KSProperty позволяет IHV ACX звуковым драйверам задать или обновить значение, заданное Bluetooth_DatapathID после вызова обратного вызова потока. Это свойство также позволяет драйверам аудиоконференции IHV назначать другой идентификатор пути к данным для каждой записи конфигурации кодека в BluetoothLEAudio_CodecConfiguration. Значение этого свойства должно иметь одно байтовое значение, чтобы представить идентификатор пути данных, используемый для всех конфигураций кодека, или n байтов, где n равно значению счетчика конфигураций в свойстве BluetoothLEAudio_CodecConfiguration. Если значение содержит несколько идентификаторов пути данных, порядок идентификаторов должен использоваться для конфигурации кодека, как упорядочено в свойстве BluetoothLEAudio_CodecConfiguration.
KSPROPERTY_BtLeAudio_DATAPATH_CONFIG
Этот KSProperty позволяет IHV ACX звуковым драйверам задать или обновить конфигурацию пути данных, как определено в Bluetooth_DatapathConfiguration. KSProperty должен отправляться звуковым драйвером в профиль Bluetooth перед вызовом обратного вызова звукового потока. Это свойство можно использовать для задания одной конфигурации для всех путей данных в одном направлении или для настройки определенной конфигурации пути к данным для каждой записи конфигурации кодека в BluetoothLEAudio_CodecConfiguration. Если значение содержит несколько конфигураций пути к данным, порядок конфигураций должен использоваться для записи конфигурации кодека, как показано в свойстве BluetoothLEAudio_CodecConfiguration. Число конфигураций кодека должно быть равно количеству идентификаторов пути данных, заданных KSPROPERTY_BtLeAudio_DATAPATH_ID или Bluetooth_DatapathID.
| Поле | Size | Ценность |
|---|---|---|
| Число конфигураций | 1 байт | Число конфигураций 1 или Кодека в BluetoothLEAudio_CodecConfiguration |
| Размер конфигурации[i] | 1 байт | Не должно превышать 255 |
| Конфигурация[i] | Размер конфигурации[i] |
Интерфейсы
Идентификаторы привязки шаблонов звуковых конечных точек
Используется фабрикой схем ACX аудиодрайвера, чтобы узнать, когда создается схема ACX для парного Bluetooth устройства.
Для создания каналов Bluetooth LE Audio используются следующие идентификаторы компонентов:
// {5C52FDB5-722A-4AB7-A342-70163B7E9B5C}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_RENDER_COMPONENT_ID,
0x5c52fdb5, 0x722a, 0x4ab7, 0xa3, 0x42, 0x70, 0x16, 0x3b, 0x7e, 0x9b, 0x5c);
// {1DFF2EE3-AE89-441C-BDE3-24F885C55DF8}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_CAPTURE_COMPONENT_ID,
0x1dff2ee3, 0xae89, 0x441c, 0xbd, 0xe3, 0x24, 0xf8, 0x85, 0xc5, 0x5d, 0xf8);
Интерфейс поддержки Bluetooth LE Audio
Используется стеком аудиодрайверов для указания его доступности для потоковой передачи Bluetooth LE Audio. Windows Bluetooth Audio service-level watch для этого интерфейса и дождитесь публикации, прежде чем включить поддержку Bluetooth LE Audio.
Следующие идентификаторы интерфейса используются для публикации интерфейса поддержки Bluetooth LE Audio:
// {BA02FA1B-0FD0-4A0F-A748-4FAE2E2D2F67}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE,
0xba02fa1b, 0x0fd0, 0x4a0f, 0xa7, 0x48, 0x4f, 0xae, 0x2e, 0x2d, 0x2f, 0x67);
Общие последовательности
Следующие последовательности выполняются для одноадресных и широковещательных сценариев звука LE.
Инициализация звукового драйвера
Когда драйвер потоковой передачи IHV ACX загружается и определяет, что поддерживает потоковую передачу Bluetooth LE Audio, он должен показать поддержку технологии путем создания объекта ACXFACTORYCIRCUIT и регистрации привязок шаблонов Bluetooth с ACX, используя идентификаторы, определенные в идентификаторах привязок шаблонов аудио конечных точек.
Одноадресные звуковые последовательности
Создание конечной точки
Если устройство LE Audio сопряжено с системой, профиль bluetooth LE Audio:
- Считывает опубликованные звуковые возможности удаленного устройства.
- Обнаруживает поддерживаемые контроллером возможности, отправляя команды HCI_Read_Local_Support_Codecs [версии 2] и HCI_Read_Local_Supported_Codec_Capabilities.
- Создает ACXCIRCUIT с поддерживаемыми форматами на основе возможностей кодека, поддерживаемых контроллером Bluetooth и удаленным звуковым устройством. Если контроллер не поддерживает кодеки, так как поддержка кодека находится в звуковом DSP или звуковом драйвере, поддерживаемые форматы устанавливаются в форматы, поддерживаемые удаленным звуковым устройством.
После создания ACXCIRCUIT ACX запрашивает фабрику канала потоковой передачи ACX IHV драйвера ACX, чтобы создать ACXCIRCUIT для обработки потоков.
При получении запроса на создание канала драйвер потоковой передачи IHV ACX:
- Создает объекты ACXCIRCUIT, ACXPIN, ACXOBJECTBAG и ACXSTREAMBRIDGE.
- Если LC3 или конкретный кодек поставщика размещается в звуковом драйвере или DSP, драйвер потоковой передачи IHV ACX задает свойство BluetoothLEAudio_CodecCapabilities в ACXOBJECTBAG.
- Драйвер потоковой передачи IHV ACX может задать Bluetooth_DatapathID или Bluetooth_DatapathConfiguration в ACXOBJECTBAG , если он известен в настоящее время.
После создания обоих каналов ACX осуществляет коллбэк EvtAcxPinConnected на переходном выводе драйвера IHV ACX.
При вызове обратного вызова EvtAcxPinConnected драйвер потоковой передачи IHV ACX:
- Извлекает закрепление моста канала профиля с помощью AcxTarget... API для получения форматов, поддерживаемых каналом профиля.
- Итерирует по списку ACXDATAFORMAT, заданному схемой профиля. Если звуковой кодек Bluetooth размещается в звуковом драйвере или звуковом DSP, драйвер IHV обновляет свои форматы ACXDATAFORMAT с форматами, поддерживаемыми кодеком и профильной схемой. В противном случае все форматы копируются в пин-код драйвера потоковой передачи IHV ACX.
- Задает обновленный список форматов на закреплении моста, если для потоковой передачи данных создается звуковой механизм.
После обновления форматов ACX включает оба интерфейса, а также создается конечная точка аудио.
Создание потока
Когда приложение запрашивает создание звукового потока, ACX вызывает зарегистрированные обратные вызовы EvtCircuitCreateStream для каждого канала, начиная с драйвера потоковой передачи IHV ACX.
При вызове обратного вызова EvtCircuitCreateStream драйвер потоковой передачи IHV ACX:
- Задает или обновляет свойства Bluetooth_DatapathId и Bluetooth_DataPathConfiguration в ACXOBJECTBAG , подключенном к ACXSTREAMBRIDGE.
- Создает ACXSTREAM с набором обратных вызовов для перехода состояния потока и обработки потока RT
- Создает элемент аудиодвижка в потоке, если звуковой конвейер поддерживает разгруженную потоковую передачу.
- Добавляет ACXSTREAM в свой мост потоковой передачи. Это вызывает обратный вызов EvtCircuitCreateStream профиля Bluetooth LE Audio.
Когда вызывается обратный вызов EvtAcxCircuitCreateStream , профиль Bluetooth LE Audio:
- Сохраняет свойства локально из ACXOBJECTBAG, заданного драйвером потоковой передачи IHV ACX, для будущих обратных вызовов, связанных с переходами потока.
- Выполняет операцию Config Codec, как определено в спецификации BAP. Параметры операции являются производными от ACXDATAFORMAT , указанного в обратном вызове EvtAcxCircuitCreateStream , а также от других параметров потока в ACXOBJECTBAG или возможностей кодека, поддерживаемых контроллером Bluetooth.
- Выделяет потоковые ресурсы, отправив команду HCI LE Set CIG Parameters.
- Задает свойство BluetoothLEAudio_StreamConnectionHandles со списком дескрипторов подключения CIS, возвращаемых контроллером Bluetooth.
- Задает свойство BluetoothLEAudio_CodecConfigurationв ACXOBJECTBAG со значением, используемым для настройки удаленных звуковых устройств.
Если драйвер потоковой передачи IHV ACX должен обновить идентификатор пути к данным или конфигурацию пути к данным на основе значений контейнера объектов, заданных профилем, то он может вызвать операции набора KSPROPERTY, чтобы обновить значение, хранящееся в канале профиля.
- Создает ACXSTREAM с набором обратных вызовов для переходов состояния потока.
Переходы состояния потока
ACX определяет порядок изменений состояния потока, исходя из аудиопотока и того, переходит ли состояние в более активное или менее активное.
- Для потоков рендеринга, переходящих из менее активного в более активное состояние, канал профиля сначала получает событие, а затем следует канал потоковой передачи.
- Для потоков отрисовки, поступающих из более активного состояния в менее активное состояние, канал потоковой передачи получает событие сначала, а затем канал профиля.
- Для потоков записи, поступающих от менее активного состояния к более активному состоянию, канал потоковой передачи получает событие сначала, а затем канал профиля.
- Для потоков записи, переходящих из более активного состояния в менее активное состояние, контур профиля сначала получает событие, а затем контур потоковой передачи.
Подготовка потока
При вызове обратного вызова EvtAcxStreamPrepareHardware профиль Bluetooth LE Audio отправляет операцию QoS конфигурации ASCS для синхронизации параметров с удаленным устройством при необходимости. Возможно, операция QoS конфигурации ASCS уже завершена, когда обратный вызов был вызван для другого направления двунаправленного потока.
При вызове обратного вызова EvtAcxStreamPrepareHardware драйвер потоковой передачи IHV ACX выделяет необходимые ресурсы для потоковой передачи и инициализирует аудиопоток для приведения в активное состояние.
Запуск потока
При вызове EvtAcxStreamRun профиль Bluetooth LE Audio:
- Применяет любые аргументы конфигурации из драйвера потоковой передачи ACX, как описано ниже, используя команду HCI_Configure_Data_Path, если они изменились. Стек Windows Bluetooth Core кэширует буфер Vendor_Specific_Config для каждой пары Data_Path_Direction и Data_Path_ID. Команда HCI_Configure_Data_Path отправляется только при изменении Vendor_Specific_Config пары Data_Path_Direction и Data_Path_ID.
- Data_Path_Direction — это AudioDirection обратного вызова канала потоковой передачи, выдавая обратный вызов EvtAcxStreamRun.
- Data_Path_ID заполняется последним назначенным значением из одного из следующих источников:
- Bluetooth_DatapathID в ACXOBJECTBAG, подключенном к ACXSTREAMBRIDGE, переданному в профиль звука Windows Bluetooth LE во время обратного вызова EvtCircuitCreateStream.
- Данные из KSPROPERTY_BtLeAudio_DATAPATH_ID.
- Данные Vendor_Specific_Config заполняются последним назначенным значением из одного из следующих источников:
- Bluetooth_DatapathConfiguration в ACXOBJECTBAG, подключенном к ACXSTREAMBRIDGE, переданному каналу аудиопрофиля Windows Bluetooth LE во время обратного вызова EvtCircuitCreateStream.
- Данные из KSPROPERTY_BtLeAudio_DATAPATH_CONFIG.
- Отправляет операцию ASCS Enable на удаленные устройства.
- Создает CISes, если они еще не созданы с помощью команды HCI_LE_Create_CIS.
- Если путь к данным еще не настроен, профиль звука Bluetooth LE:
- Устанавливает пути к данным ISO с помощью команды HCI_LE_Setup_ISO_Data_Path
- Если драйвер потоковой передачи IHV ACX задает свойство BluetoothLEAudio_CodecCapabilities, то значение поля Codec_ID в HCI_LE_Setup_ISO_Data_Path должно быть установлено как прозрачное (0x3), как определено в номерах, назначенных Bluetooth. В противном случае значение должно совпадать с идентификатором Codec, используемым в операции кодека конфигурации в процедуре создания потока.
- Устанавливает пути к данным ISO с помощью команды HCI_LE_Setup_ISO_Data_Path
- Если аудиопоток является потоком записи, звуковой профиль Bluetooth LE выполняет операцию готовности приемника BAP.
При вызове обратного вызова EvtAcxStreamRun драйвер потоковой передачи IHV ACX начинает обработку входящих звуковых данных из аудиосистемы Windows (воспроизведение) или контроллера Bluetooth (запись).
Приостановка потока
При активации обратного вызова EvtAcxStreamPause, профиль Bluetooth LE Audio:
- Выполняет процедуру отключения одноадресного потока BAP.
- Удаляет путь к данным ISO с помощью команды HCI_LE_Remove_ISO_Data_Path.
- Выполняет процедуру остановки приемника ASCS, если аудиопоток является потоком одноадресной записи.
- Отключите CISes, если для этого CIS нет других потоков.
При вызове callback-функции EvtAcxStreamPause драйвер потоковой передачи IHV ACX приостанавливает поток обработки звука.
Поток выпуска
Когда вызывается обратный вызов EvtAcxStreamReleaseHardware , профиль bluetooth LE Audio:
- Отправляет операцию выпуска ASCS на удаленное устройство Bluetooth LE Audio
- Удаляет CIG, если все CIS отключены.
Когда вызывается обратный вызов EvtAcxStreamReleaseHardware , драйвер потоковой передачи IHV ACX освобождает ресурсы звукового конвейера.
Отключение конечной точки
Профиль Windows Bluetooth LE Audio обновляет состояние подключения конечной точки, если удаленное устройство с одноадресной передачей не имеет LE-ACL подключения к компьютеру или сообщает через доступные аудиоконтексты PACS, что оно недоступно для потоковой передачи. При отключении конечной точки звуковая служба Windows делает недействительными все активные потоки к этой конечной точке. Это приводит к последовательностям приостановки и возобновления потока.
Громкость и выключение звука
Цепь потоковой передачи IHV ACX должна включать только элементы громкости и отключения звука, если драйвер потоковой передачи требует наличия аудио-движка. При использовании звукового модуля флаги конфигурации должны быть заданы следующим образом:
ACX_AUDIOENGINE_CONFIG audioEngineCfg;
ACX_AUDIOENGINE_CONFIG_INIT(&audioEngineCfg);
…
audioEngineCfg.Flags |= AcxAudioEngineConfigVolumeSecondary; // Use this control only if endpoint doesn't have one.
audioEngineCfg.MuteElement = muteElement;
audioEngineCfg.Flags |= AcxAudioEngineConfigMuteSecondary; // Use this control only if endpoint doesn't have one.
audioEngineCfg.PeakMeterElement = peakmeterElement;
audioEngineCfg.Flags |= AcxAudioEngineConfigPeakMeterSecondary; // Use this control only if endpoint doesn't have one.
Это необходимо, чтобы разрешить конечным точкам Bluetooth LE Audio использовать определенные Bluetooth SIG профили управления громкостью и микрофоном для изменения громкости и режима отключения звука одноадресных аудиоконечных точек.
Если удаленное устройство Bluetooth LE Audio не поддерживает службы управления громкостью или микрофоном, либо конечная точка создана для широковещательного звука, то элементы громкости и отключения звука в звуковом механизме должны служить резервным вариантом для обработки запросов на изменение из звуковой системы. Звуковая система Windows обрабатывает изменения громкости и выключения. Если нет аудиодвижка и удаленное устройство не поддерживает регулировку громкости, либо сервисы микрофона, либо аудиовыход предназначен для широковещательного звука.
Удаление конечной точки
Конечная точка звука Bluetooth LE удаляется из системы при уничтожении канала профиля или канала потоковой передачи. Канал профиля можно удалить при удалении пары удаленного одноадресного устройства из Windows или переключателя Bluetooth.
- Когда звуковой профиль Windows Bluetooth LE удаляет канал, ACX отключает свои интерфейсы конечных точек, чтобы сигнализировать звуковой службе Windows о том, что конечная точка должна быть удалена.
- Если интерфейсы отключены, служба звука Windows недействительна любые активные потоки в конечную точку звука Bluetooth LE, эта операция приводит к приостановке потока и обратным вызовам выпуска в канале потоковой передачи.
- Чтобы завершить удаление конечной точки, ACX аннулирует схему драйвера потоковой передачи IHV ACX, что приводит к тому, что WDF вызывает функцию обратного вызова для очистки этой схемы.
- При вызове обратного вызова функции очистки потоковый драйвер IHV ACX освобождает свой контур.
Bluetooth LE и классическое аудио сосуществование
Windows гарантирует, что для парного аудиоустройства Bluetooth, поддерживающего обе технологии, активен только классический звук или звук LE. Если LE аудио активно, то боковые полосы DDIs для A2DP и HFP на удаленном устройстве отключаются, и для конечной точки LE аудио создается профильный контур. Если классический звук включен, боковые полосы DDIs для A2DP и HFP на удаленном устройстве активированы, а контур профиля не создается для конечной точки звука LE.
Управление питанием
Bluetooth LE Audio не имеет каких-либо требований к управлению питанием или потоков вне того, что уже определено WDF.
Супер широкополосная стерео для сценариев голосовой связи
Современный интерфейс bluetooth аудио удобно, но имеет ограничения, особенно при сравнении с проводными звуковыми интерфейсами. Одним из ключевых ограничений, с последствиями для пользователя, является падение на моно аудио всякий раз, когда микрофон активен. Это блокирует такие возможности, как пространственный звук в Teams и других приложениях VoIP от работы, и это значительно снижает игровое взаимодействие с участием голосового чата.
Bluetooth LE Audio закрывает разрыв с улучшенной точностью звука и снижением задержки, добавив поддержку стереопроизвонки во время использования микрофона.
Пары формата отрисовки и записи
Решение IHV объявляет о своей поддержке стереорисовки с монозахватом, предоставляя список пар формата отрисовки и записи, каждый из которых состоит из формата стереорисовки и формата монозахвата, который можно использовать одновременно для двунаправленной потоковой передачи. Формат стереорисовки (или монозахвата) определяется как пара Sampling_Frequency (например, 16/24/32/48 кГц) и Audio_Channel_Count (например, 1/2 ч), связанного с определенным звуковым кодеком, который не ограничивается LC3.
Например, предположим, что решение IHV поддерживает как 16kГц стереорисовку с монозахватным захватом 16kГц, так и 48kГц с 24kГц или 32kГц монозахватом. Соответствующие пары формата отрисовки и записи выглядят следующим образом:
| Entry | Формат отрисовки | Формат записи |
|---|---|---|
| 1 | Render(16 кГц, 2 ч) | Захват(16 кГц, 1 ч) |
| 2 | Render(48 кГц, 2 ч) | Захват(24 кГц, 1 ч) |
| 3 | Render(48 кГц, 2 ч) | Захват(32 кГц, 1 ч) |
Таблица 3. Примеры пар формата отрисовки и записи
Так как член координированного набора может присоединяться или отсоединяться в любое время, решение IHV должно поддерживать монорисовку с монозахватом с одинаковыми частотами выборки для каждой записи в парах форматирования. Это означает, что, учитывая пример в таблице 3, все пары форматирования ниже также должны быть неявно поддерживаются, даже если они не объявлены явным образом:
| Entry | Формат отрисовки | Формат записи |
|---|---|---|
| 1 | Render(16 кГц, 1 ч) | Захват(16 кГц, 1 ч) |
| 2 | Render(48 кГц, 1 ч) | Захват(24 кГц, 1 ч) |
| 3 | Render(48 кГц, 1 ч) | Захват(32 кГц, 1 ч) |
Таблица 4. Неявные пары формата отрисовки и записи для таблицы 3
Основное различие между таблицей 3 и таблицей 4 заключается в том, что Audio_Channel_Count для каждого формата отрисовки в последнем — одно (для "mono render"); все остальное остается неизменным.
Обязательные пары формата отрисовки и записи
Таблица 5 определяет список аудиоформатов всех решений IHV:
| Entry | (Render_format, Capture_format) |
|---|---|
| 1 | { Render(48 kГц, 2 ч), Capture(32 kГц,1 ch) } |
| 2 | { Render(32 kГц, 2 ч), Capture(32 kHz,1 ch) } |
| 3 | { Render(24 kГц, 2 ч), Capture(24 kГц,1 ch) } |
| 4 | { Render(16 kГц, 2 ч), Capture(16 kHz,1 ch) } |
Таблица 5 Обязательные пары формата отрисовки и записи
Объявление возможностей
В зависимости от того, поддерживает ли контроллер Bluetooth аудиокодек (по умолчанию LC3), решение IHV объявляет список пар формата отрисовки и записи, которые он поддерживает разными способами. В частности:
Если кодек находится в контроллере Bluetooth, контроллер и драйвер потоковой передачи IHV ACX должны объявлять списки пар формата независимо. Если два списка не согласны друг с другом, Windows будет пересекаться и сохранять общие части.
Если кодек не находится в контроллере Bluetooth (например, он находится в звуковом DSP), для объявления списка пар формата требуется только драйвер потоковой передачи IHV ACX. Контроллер Bluetooth
Так как Codec_Capability[i] в ответе на HCI_Read_Local_Supported_Codec_Capabilities не поддерживает метаданные, контроллер Bluetooth требуется для поддержки семейства идентификаторов кодека майкрософт (см. таблицу 7), чтобы Windows могли запрашивать дополнительные возможности кодека, например список пар формата отрисовки и записи, которые невозможно легко передать через существующий интерфейс HCI.
| Параметр | Размер (октеты) | Description |
|---|---|---|
| Codec_ID | 5 |
Октет 0: 0xFF (конкретный поставщик) Октябрь 1–2: 0x0006 (Майкрософт) Октет 3–4: Идентификатор кодека, определяемый поставщиком Если самый значительный бит октета 4 равен нулю (0), октет 3 содержит утвержденный SIG формат кодирования (начиная от 0x00 до 0x07 по состоянию на 31 мая 2024 г.), за исключением 0xFF. Если самый значительный бит октета 4 имеет значение один (1), октет 3 содержит формат кодирования, который еще не определен и зарезервирован Windows для дальнейшего использования. |
Таблица 7. Идентификатор кодека для конкретного майкрософт
Области этих идентификаторов кодека, относящиеся к Корпорации Майкрософт, ограничены следующими:
- HCI_Read_Local_Supported_Codecs [версия 2]
- HCI_Read_Local_Supported_Codec_Capabilities
По контракту Windows не будет использовать ни один из этих идентификаторов кодека майкрософт для других типов команд HCI.
HCI_Read_Local_Supported_Codecs [версия 2]
Контроллер должен объявлять поддержку идентификатора кодека майкрософт через Vendor_Specific_Codec_ID и Vendor_Specific_Codec_Transport:
| Поле | Description |
|---|---|
| Vendor_Specific_Codec_ID[k] |
Октеты от 0 до 1: Идентификатор компании (0x0006) Дополнительные сведения см. в разделе "Октет 1–2 " в таблице 7. Октеты 2–3: Идентификатор кодека, определенный поставщиком (например, 0x0006 для LC3) Дополнительные сведения см. в разделе "Октет 3–4 " в таблице 7. |
| Vendor_Specific_Codec_Transport[k] | необходимо поддерживать LE_CIS (0x02). |
Таблица 8 HCI_Read_Local_Supported_Codec [v2] значение ответа
HCI_Read_Local_Supported_Codec_Capabilities
Чтобы запросить все возможности кодека windows, включая список пар формата отрисовки и записи, вызовы Windows HCI_Read_Local_Supported_Codec_Capabilities со следующими аргументами:
| Параметр | Размер (октеты) | Description |
|---|---|---|
| Codec_ID (идентификатор кодека майкрософт) | 5 |
Октет 0: 0xFF (конкретный поставщик) Октет 1–2: Идентификатор компании (0x0006) Дополнительные сведения см. в разделе "Октет 1–2 " в таблице 8. Октет 3–4: Идентификатор кодека, определенный поставщиком (например, 0x0006 для LC3) Дополнительные сведения см. в разделе "Октет 3–4 " в таблице 8. |
| Logical_Transport_Type | 1 | 0x2 (LE CIS) |
| Направление | 1 | 0x00 (входные данные, например, узел к контроллеру) |
Аргументы команд таблицы 9 HCI_Read_Local_Supported_Codec_Capabilities
После получения такой команды контроллер должен вернуть все возможности Windows для кодека, указанного идентификатором кодека, определенного поставщиком. Например, если для идентификатора кодека, определенного поставщиком, задано значение 0x0006, контроллер должен вернуть все возможности, связанные с LC3, необходимые Для Windows.
Ответ для команды поддерживает ту же структуру верхнего уровня, что и в спецификации Bluetooth Core:
| Параметр | Размер (октеты) | Description |
|---|---|---|
| Состояние | 1 | 0x00 (успех); 0x01 0xFF (код ошибки) |
| Num_Codec_Capabilities | 1 | Общее количество возвращаемых возможностей. |
| Codec_Capability_Length[i] | 1 | Длина поля Codec_Capability[i]. |
| Codec_Capability [i] | Разные | Codec_Capability_Length[i] октеты данных о возможностях, относящихся к кодеку. |
Таблица 10 HCI_Read_Local_Supported_Codec_Capabilities структура ответа
Однако полезные данные Codec_Capability[i] отличаются от того, что определено SIG и адаптировано для Windows.
В настоящее время единственная возможность кодека, определяемая Windows, Bidirectional_Multichannel_Streaming, которая описана ниже.
Bidirectional_Multichannel_Streaming
Рекламируя Bidirectional_Multichannel_Streaming, контроллер подтверждает, что поддерживает одновременную отрисовку m-channel с записью n-канала, где m ≥ 1, n ≥ 1 и m + n> 2. (Стереорисовка с монохватным захватом фактически является Bidirectional_Multichannel_Streaming с m = 2 и n = 1.)
В этой таблице описывается формат Bidirectional_Multichannel_Streaming:
| Параметр | Размер (октеты) | Биты | Description |
|---|---|---|---|
| Тип 1 | 0x00 | (Bidirectional_Multichannel_Streaming) | |
| Channel_Counts | 1 | Бит 0 до 4: (m – 1), где m — количество каналов отрисовки | (Для стереорисовки с монозахватом это значение должно иметь значение, 2 – 1 = 1.) |
| Channel_Counts | 1 | Бит 5–7: (n – 1), где n — количество каналов записи | (Для стереорисовки с монозахватом это значение должно иметь значение, 1 – 1 = 0.) |
| Render_Sampling_Frequencies | 1 |
Бит 0: 16 кГц Бит 1: 24 кГц Бит 2: 32 кГц Бит 3: 48 кГц Бит 4: RFU Бит 5: RFU Бит 6. RFU Бит 7: RFU |
Все частоты выборки в этом списке имеют то же число каналов, что и число каналов, указанное битом 0-4 из Channel_Count. Все биты RFU зарезервированы и должны иметь значение нулю. |
| Capture_Sampling_Frequencies_-List[i], где 0 ≤ i ≤ 7 | i + 1 |
Бит 0: 16 кГц Бит 1: 24 кГц Бит 2: 32 кГц Бит 3: 48 кГц Бит 4: RFU Бит 5: RFU Бит 6. RFU Бит 7: RFU |
Все частоты выборки в этом списке имеют то же число каналов, что и число каналов, указанное битом 5-7 Channel_Count. Каждый экземпляр Capture_Sampling_Frequencies_List имеет размер одного октета и может содержать до восьми таких экземпляров (если все биты в Render_Sampling_Frequencies заданы как один). Все биты RFU зарезервированы и должны иметь значение нулю. |
Таблица 11 Bidirectional_Multichannel_Streaming Формат (максимальная длина: 11 байт)
Channel_Counts
Выбор количества битов для отрисовки и записи является произвольным — пять битов выделены для отрисовки (для покрытия всех определенных SIG звуковых расположений), а также три бита для записи (чтобы свести к минимуму размер полезных данных HCI).
Например, Channel_Counts для таблицы 3 — 0b000000001, так как число каналов отрисовки и записи, например m и n, равно 2 и 1 соответственно:
| Capture | Render | |
|---|---|---|
| Бит | 7 6 5 | 4 3 2 1 0 |
| Ценность | 0 0 0 | 0 0 0 0 0 1 |
Таблица 12 Channel_Counts для таблицы 3
При проектировании все возможности с одной парой идентификатора кодека майкрософт и Channel_Counts должны быть сгруппированы и представлены одной Bidirectional_Multichannel_Streaming записью.
Render_Sampling_Frequencies
Поле Render_Sampling_Frequencies указывает все частоты отрисовки, которые можно использовать в контексте связанной структуры Bidirectional_Multichannel_Streaming.
Например, Render_Sampling_Frequencies для таблицы 3 составляет 0b0000'1001, что означает, что как 16kHz, так и 48kГц можно использовать в качестве частоты выборки для отрисовки с двумя каналами:
| кГц | RFU | RFU | RFU | RFU | 48 | 32 | двадцать четыре | 16 |
|---|---|---|---|---|---|---|---|---|
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Ценность | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
Таблица 13 Render_Sampling_Frequencies для таблицы 3
Capture_Sampling_Frequencies_List[i]
Для каждого "одного" бита в Render_Sampling_Frequencies, начиная с наименьшего значения до наиболее важного, контроллер должен предоставить уникальную маску бита (Capture_Sampling_Frequencies_List[i]), указывающую все частоты захвата, совместимые с частотой, представленной этим битом отрисовки. Контроллер не должен предоставлять Capture_Sampling_Frequencies битовую маску для любого бита "ноль" в Render_Sampling_Frequencies.
Например, маски битов записи для таблицы 3 выглядят следующим образом:
// The order matters!
{
// Capture_Sampling_Frequencies_List[0] for 16kHz dual-channel rendering.
0b0000'0001, // 16 kHz single-channel capture
// Do not create a dummy Capture_Sampling_Frequencies_List entry, for example, 0b0000'0000,
// for 24kHz dual-channel rendering, which is not supported at all.
// Do not create a dummy Capture_Sampling_Frequencies_List entry, for example, 0b0000'0000,
// for 32kHz dual-channel rendering, which is not supported at all.
// Capture_Sampling_Frequencies_List[1] for 48kHz dual-channel rendering.
0b0000'0110 // Either 24 or 32 kHz single-channel capture
}
В частности:
| Render_-Sampling_-Frequencies | я | Capture_-Sampling_-Частоты[i] | Description |
|---|---|---|---|
| 0b0000'1001 ⇤ order ↤ |
0 | 0b0000'0001 | Первый наименьший "один" бит (бит 0) в Render_Sampling_Frequencies соответствует 16 кГц. Включите бит 0 Capture_Sampling_Frequencies_List[0] , чтобы указать, что запись 16 кГц может быть сопряжена с этой частотой отрисовки. |
| 0b0000'1 001 ⇤ order ↤ |
1 | 0b0000'0110 | Второй наименьший "один" бит (бит 3) в Render_Sampling_Frequencies соответствует 48 кГц. Включите бит 1 и 2 из Capture_Sampling_Frequencies_List[1] , чтобы указать, что запись 24 кГц и 32 кГц может быть сопряжена с этой частотой отрисовки. |
Пример таблицы 14 для создания Capture_Sampling_Frequencies_List[i] для Render_Sampling_Frequencies
Драйвер потоковой передачи IHV ACX
Для поддержки стереорисовки с монозахватом драйвер потоковой передачи IHV ACX задает свойство устройства, BluetoothLEAudioBidirectionalMulticnelStreamingCapabilities, представляющее пары формата отрисовки и записи, описанные в 3.11.2, экземпляру класса интерфейса устройства GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE.
Свойство должно быть доступно сразу после создания экземпляра класса интерфейса устройства, а значение свойства остается постоянным в течение всего времени существования экземпляра класса интерфейса устройства.
Ключ свойства BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities определяется следующим образом:
DEFINE_DEVPROPKEY(DEVPKEY_BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities,
0xd27ba3a4, 0x1bfe, 0x4374, 0x88, 0x7d, 0xe8, 0xb3, 0xa6, 0xac, 0xe, 0xe9, 2); // DEVPROP_TYPE_BINARY (BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY[])
Тип значения свойства, связанный с ключом, DEVPKEY_BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities, определяется следующим образом:
typedef struct _BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY
{
BTH_LE_AUDIO_CODEC_ID CodecId;
BOOL IsCodecPresent;
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CHANNEL_COUNT RenderChannelCount;
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CHANNEL_COUNT CaptureChannelCount;
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY RenderSamplingFrequencies;
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY CaptureSamplingFrequenciesList[
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_BIT_LENGTH
];
} BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY;
Where:
typedef struct _BTH_LE_AUDIO_CODEC_ID
{
UINT8 CodingFormat;
UINT16 CompanyId;
UINT16 VendorCodecId;
} BTH_LE_AUDIO_CODEC_ID;
typedef UINT8 BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CHANNEL_COUNT;
typedef enum _BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY :
UINT8 // Bit flags
{
// 16 kHz
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_16000HZ = 0x1,
// 24 kHz
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_24000HZ = 0x2,
// 32 kHz
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_32000HZ = 0x4,
// 48 kHz
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_48000HZ = 0x8,
// A dummy value for indicating a sampling frequency is "not applicable" in the
// respective context.
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_NONE = 0,
// All valid sampling frequencies combined.
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_ALL =
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_16000HZ |
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_24000HZ |
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_32000HZ |
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_48000HZ,
} BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY;
DEFINE_ENUM_FLAG_OPERATORS(BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY);
#define BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_BIT_LENGTH \
(sizeof(BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY) * 8)
Структура BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY соответствует аналогичным правилам, как описано в Bidirectional_Multichannel_Streaming, за исключением того, что:
Драйвер потоковой передачи ACX требуется для установки дополнительного флага IsCodecPresent, чтобы указать, является ли кодек интересен концептуально частью драйвера потоковой передачи ACX. Например, если кодек находится в звуковом DSP, значение IsCodecPresent должно иметь значение TRUE. Если кодек находится в контроллере Bluetooth, флаг должен иметь значение FALSE.
Для отрисовки m-channel с записью n-канала значения для RenderChannelCount и CaptureChannelCount соответствуют м и n соответственно. Другими словами, RenderChannelCount и CaptureChannelCount указывают реальное количество каналов отрисовки и записи.
Учитывая индекс, я, существует сопоставление "один к одному" между i-th наименее значимым битом RenderSamplingFrequencies и записью i-th CaptureSamplingFrequenciesList. Если i-th бит RenderSamplingFrequencies равно нулю, задайте для CaptureSamplingFrequenciesList[i] значение нулю.
В следующем примере кода показано, как создать интерфейс устройства GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE и задать свойство интерфейса интерфейса устройства BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities:
PAGED_CODE_SEG
NTSTATUS
AdvertiseBluetoothLEAudioSupport(
WDFDEVICE Device
)
{
// Create a device interface with the class,
// GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE, for the specified WDF device.
DECLARE_CONST_UNICODE_STRING(
bluetoothLEAudioSupportInterface, L"BluetoothLEAudioSupport");
RETURN_NTSTATUS_IF_FAILED(WdfDeviceCreateDeviceInterface(
Device,
&GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE,
(PUNICODE_STRING)&bluetoothLEAudioSupportInterface));
#pragma region associate BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities with GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE.
// Advertise bidirectional multichannel streaming support by setting the device
// interface property,
// BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities,
// to the newly created device interface.
// See Table 7 "Microsoft-specific codec ID" in Microsoft Bluetooth LE Audio
// IHV Specification for reference.
constexpr BTH_LE_AUDIO_CODEC_ID microsoftLC3CodecId
{
0xff, // Vendor-specific
0x6, // Microsoft
0x6, // LC3
};
constexpr BTH_LE_AUDIO_CODEC_ID microsoftCVSDCodecId
{
0xff, // Vendor-specific
0x6, // Microsoft
0x2, // CVSD
};
// For readability purpose only
constexpr auto SamplingFrequency_None = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_NONE;
constexpr auto SamplingFrequency_16000Hz = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_16000HZ;
constexpr auto SamplingFrequency_24000Hz = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_24000HZ;
constexpr auto SamplingFrequency_32000Hz = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_32000HZ;
constexpr auto SamplingFrequency_48000Hz = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_48000HZ;
constexpr auto SamplingFrequency_All = BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_SAMPLING_FREQUENCY_ALL;
// Bidirectional multichannel streaming capabilities
BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY capabilities[]
{
// List of formats supported for 2-channel render with 1-channel capture using
// the LC3 codec:
//
// Render Capture
// (Freq, #Chan) (Freq, #Chan)
// ============= =============
// (16kHz, 2) <---> (16kHz, 1)
// ---------- ----------
// (24kHz, 2) <---> (16kHz, 1)
// (24kHz, 2) <---> (24kHz, 1)
// ---------- ----------
// (32kHz, 2) <---> (16kHz, 1)
// (32kHz, 2) <---> (24kHz, 1)
// (32kHz, 2) <---> (32kHz, 1)
// ---------- ----------
// (48kHz, 2) <---> (16kHz, 1)
// (48kHz, 2) <---> (24kHz, 1)
// (48kHz, 2) <---> (32kHz, 1)
// (48kHz, 2) <---> (48kHz, 1)
//
{
// CodecId
microsoftLC3CodecId,
// IsCodecPresent,
FALSE, // The LC3 codec is in the Bluetooth Controller.
// RenderChannelCount
2,
// CaptureChannelCount
1,
// RenderSamplingFrequencies
SamplingFrequency_All,
// CaptureSamplingFrequencies: List of 1-channel capture sampling
// frequencies compatible with 16kHz, 2-channel render
SamplingFrequency_16000Hz,
// CaptureSamplingFrequencies: List of 1-channel capture sampling
// frequencies compatible with 24kHz, 2-channel render
SamplingFrequency_16000Hz | SamplingFrequency_24000Hz,
// CaptureSamplingFrequencies: List of 1-channel capture sampling
// frequencies compatible with 32kHz, 2-channel render
SamplingFrequency_16000Hz |
SamplingFrequency_24000Hz |
SamplingFrequency_32000Hz,
// CaptureSamplingFrequencies: List of 1-channel capture sampling
// frequencies compatible with 48kHz, 2-channel render
SamplingFrequency_All,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
},
// List of formats supported for 4-channel render with 2-channel capture using
// the CVSD codec:
//
// Render Capture
// (Freq, #Chan) (Freq, #Chan)
// ============= =============
// (16kHz, 4) <---> (16kHz, 2)
// ---------- ----------
// (32kHz, 4) <---> (16kHz, 2)
// (32kHz, 4) <---> (32kHz, 2)
//
{
// CodecId
microsoftCVSDCodecId,
// IsCodecPresent,
TRUE, // The CVSD codec is in the audio DSP.
// RenderChannelCount
4,
// CaptureChannelCount
2,
// RenderSamplingFrequencies
SamplingFrequency_16000Hz | SamplingFrequency_32000Hz,
// CaptureSamplingFrequencies: List of 2-channel capture sampling
// frequencies compatible with 16kHz, 4-channel render
SamplingFrequency_16000Hz,
// CaptureSamplingFrequencies: List of 2-channel capture sampling
// frequencies compatible with 24kHz, 4-channel render
SamplingFrequency_None, // N/A
// CaptureSamplingFrequencies: List of 2-channel capture sampling
// frequencies compatible with 32kHz, 4-channel render
SamplingFrequency_16000Hz | SamplingFrequency_32000Hz,
// CaptureSamplingFrequencies: List of 2-channel capture sampling
// frequencies compatible with 48kHz, 4-channel render
SamplingFrequency_None, // N/A
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
// CaptureSamplingFrequencies: RFU
SamplingFrequency_None,
}
};
// Call IoSetDeviceInterfacePropertyData to associate the capabilities associated
// with the DEVPKEY.
WDFSTRING wdfSymbolicLinkName;
RETURN_NTSTATUS_IF_FAILED(WdfStringCreate(
nullptr, WDF_NO_OBJECT_ATTRIBUTES, &wdfSymbolicLinkName));
auto deleteWdfStringOnExt = scope_exit([wdfSymbolicLinkName]() -> void
{
WdfObjectDelete(wdfSymbolicLinkName);
});
RETURN_NTSTATUS_IF_FAILED(WdfDeviceRetrieveDeviceInterfaceString(
Device,
&GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE,
&bluetoothLEAudioSupportInterface,
wdfSymbolicLinkName));
UNICODE_STRING symbolicLinkName;
WdfStringGetUnicodeString(wdfSymbolicLinkName, &symbolicLinkName);
RETURN_NTSTATUS_IF_FAILED(IoSetDeviceInterfacePropertyData(
&symbolicLinkName,
&DEVPKEY_BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities,
LOCALE_NEUTRAL,
PLUGPLAY_PROPERTY_PERSISTENT,
DEVPROP_TYPE_BINARY,
sizeof(capabilities), capabilities));
#pragma endregion
return STATUS_SUCCESS;
}
Связанные статьи
- Расширения аудиоклассов ACX
- Спецификация профиля звука Bluetooth Basic
- Спецификация Bluetooth Core 5.3
- Спецификация сервиса аудиовозможностей Bluetooth
- Спецификация службы управления аудиопотоком Bluetooth
- Назначенные номера Bluetooth
- Рекомендации по обходу Bluetooth HFP для звуковых драйверов
- Bluetooth HFP обходить потоковую передачу звука