Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporciona información general sobre el audio Bluetooth LE introducido en Windows 11 versión 22H2 (KB5026446).
Introducción
Bluetooth LE Audio permite transmitir audio unicast o difundir audio a dispositivos Bluetooth LE mediante transporte isócrono. A partir de la versión 5.3 de la especificación del núcleo Bluetooth, no hay ninguna interfaz de controlador de host (HCI) definida estándar para que las plataformas host envíen y reciban datos isocrónicos hacia y desde el controlador Bluetooth. En este documento se define la ruta de acceso de audio específica del proveedor de Windows Bluetooth (VSAP) para permitir que las plataformas usen soluciones específicas del proveedor para habilitar el streaming de audio Bluetooth LE. La interfaz de software de VSAP usa extensiones de clase de audio de Windows (ACX) y más propiedades de interfaz definidas en este documento.
Terminología y requisitos previos
Además de los términos definidos en esta tabla, este documento también hace referencia a los términos definidos por las extensiones de clase de audio de Windows.
| Término | Definición |
|---|---|
| Audio LE | Abreviatura de Bluetooth LE Audio |
| Audio clásico | Streaming de audio Bluetooth que usa el perfil de manos libres (HFP) y el perfil de distribución de audio avanzado (A2DP) |
| Dispositivo de audio | Un único dispositivo Bluetooth LE Audio remoto o un conjunto de dispositivos Bluetooth LE Audio que componen un único punto de conexión de audio desde la perspectiva de Windows. |
| BAP | El perfil de audio básico define cómo los dispositivos pueden distribuir y consumir audio mediante comunicaciones bluetooth de baja energía (LE). |
| TMAP | El perfil de audio multimedia y telefonía especifica configuraciones interoperables de los perfiles y los servicios de audio de nivel inferior. |
| ASCS | El servicio de control de secuencias de audio define una manera estándar para que los dispositivos Bluetooth LE Audio configuren y establezcan secuencias de audio de unidifusión. |
| PACS | El Servicio de funcionalidades de audio publicado define una manera estándar de que los dispositivos Bluetooth LE Audio notifiquen sus funcionalidades de códec de audio compatibles. |
| CEI | El transporte de transmisiones isocronosas conectadas se usa para enviar y recibir datos de audio de unidifusión entre dispositivos Bluetooth LE. |
| BIS | El transporte de flujo isocrónico de transmisión se utiliza para transferencias de datos de audio sin conexión. |
| ACX | Corto para extensiones de clase de audio, que es el modelo de controlador requerido por todos los controladores de audio para admitir Bluetooth LE Audio en Windows. |
| Circuitos de streaming | Uno o varios objetos ACXCIRCUIT creados por la pila de controladores de audio específicos del fabricante para su ruta de transmisión. |
| Circuito de perfil | Objeto ACXCIRCUIT creado por la implementación del perfil de audio Bluetooth LE en Windows. Este ACXCIRCUIT no es un circuito de streaming. |
En este artículo se da por supuesto que está familiarizado con los términos definidos anteriormente y los siguientes comandos de HCI definidos en la especificación de Bluetooth Core:
- Comandos de controlador local
- HCI_Read_Local_Supported_Codecs (v2)
- HCI_Read_Local_Supported_Codec_Capabilities
- HCI_LE_Setup_ISO_Data_Path
- HCI_LE_Eliminar_Ruta_de_Datos_ISO
- HCI_Configure_Data_Path
- Comandos de streaming de unidifusión
- HCI_LE_Set_CIG_Parameters
- HCI_LE_Create_CIS
- HCI_LE_Remove_CIG
- Comandos de streaming de difusión
- 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 requiere que los controladores de audio usen el marco ACX. La adopción de ACX para Bluetooth LE Audio proporciona varias ventajas, como:
- Admite el modelo de controlador de audio preferido para Windows en el futuro.
- Usa la compatibilidad nativa de ACX con soluciones de audio de múltiples capas sin necesidad de un DDI dedicado entre controladores.
- No requiere de controladores de audio IHV para transmitir las solicitudes del sistema de audio a la pila de Bluetooth. En su lugar, ACX puede enviar solicitudes directamente a la pila Bluetooth a través del circuito de perfil.
Arquitectura
Definiciones
Los siguientes componentes están implicados en las diferentes variantes de arquitectura de VSAP.
Marco de Windows ACX
Este componente permite el soporte para un extremo de audio multi-nivel. Para Bluetooth LE Audio, los componentes de software que componen un punto de conexión de audio son la pila de controladores de audio específicos del proveedor y el perfil de audio Bluetooth LE de Windows.
Conjunto de controladores de audio específicos para el proveedor
Este componente específico del proveedor es responsable de enviar y recibir datos de audio Bluetooth LE hacia y desde un controlador Bluetooth a través de una interfaz de audio definida por el proveedor. Constará como mínimo de un controlador de streaming ACX para administrar los datos de audio entrantes y salientes. Es posible que se incluyan más controladores ACX si son partes necesarias del punto de conexión de audio ACX de varios circuitos. Este componente también se conoce como controlador de streaming de ACX de IHV en este documento.
Perfil de audio de Bluetooth LE de Windows
Este componente contiene la implementación del perfil de audio básico (BAP), el perfil de control de volumen y el perfil de control de micrófono. Es responsable de crear el control ACXCIRCUIT para cada dispositivo Bluetooth LE Audio o conjunto de dispositivos emparejados con Windows. También informa de los formatos de audio desde el dispositivo remoto y el controlador Bluetooth, y administra el estado de los canales y grupos isócronos.
Pila central de Bluetooth de Windows
Este componente proporciona una interfaz para permitir que el perfil de audio Bluetooth LE de Windows consulte las funcionalidades de códec compatibles desde el controlador Bluetooth local y administre el estado de los canales y grupos isócronos.
Códec LC3
Este subcomponente se traduce entre el audio LC3 comprimido y el audio PCM. Debe admitir funcionalidades de codificación y descodificación. El códec LC3 se puede implementar en software como parte de la pila del controlador de audio específico del proveedor (VSAP). Como alternativa, se puede implementar en hardware como parte del DSP de audio o el controlador Bluetooth. El diagrama menciona LC3 por nombre, ya que es el códec estándar compatible con bluetooth SIG. Los códecs futuros y los códecs específicos del proveedor compatibles con Windows también se pueden incorporar a la arquitectura de forma similar.
Variantes de arquitectura
La arquitectura de VSAP de audio Bluetooth LE admite diferentes variantes para streaming.
- Streaming de audio Bluetooth LE de banda lateral sin descarga de audio
- Streaming de audio Bluetooth LE de banda lateral con descarga de audio
- Proveedor específico del streaming de audio Bluetooth LE de banda
En los diagramas siguientes, los componentes sombreados son proporcionados por el IHV y los componentes no sombreados son proporcionados por el sistema operativo.
Arquitectura de audio de banda lateral Bluetooth LE sin necesidad de descarga de audio
Una arquitectura de banda lateral utiliza una interfaz de audio específica del proveedor para permitir que el conjunto controlador de audio envíe y reciba datos de audio al controlador Bluetooth. Esta ruta de datos es independiente de la ruta de datos de HCI que se usa para otros datos Bluetooth, como la señalización de mensajes entre el cliente de unidifusión y el servidor de unidifusión remoto. En el diagrama siguiente se modela una arquitectura de banda lateral donde el códec LC3 se hospeda en el controlador Bluetooth. También es válido tener el códec LC3 hospedado como parte de la pila de controladores de audio específicos del proveedor para la codificación y descodificación de software. En ese caso, el audio que se envía al controlador Bluetooth se formatearía como fotogramas de audio LC3 en lugar de audio PCM.
En el diagrama siguiente se muestra una arquitectura de audio Bluetooth LE de banda lateral con un códec LC3 en el controlador Bluetooth.
En el diagrama siguiente se muestra una arquitectura de audio Bluetooth LE de banda lateral con un códec LC3 en la pila de controladores de audio.
Arquitectura de audio Bluetooth LE de banda lateral con descarga de audio
Una arquitectura de banda lateral con descarga de audio incluye un componente de hardware DSP de audio para proporcionar una solución de streaming de audio Bluetooth LE con ventajas de ahorro de energía. En los diagramas siguientes se muestra una posible arquitectura con el códec LC3 en el controlador Bluetooth y el códec del DSP de audio.
En el diagrama siguiente se muestra un audio Bluetooth LE de banda lateral con arquitectura de descarga de audio con un códec LC3 en el controlador Bluetooth.
En el diagrama siguiente se muestra un audio Bluetooth LE de banda lateral con arquitectura de descarga de audio con un códec LC3 en el DSP de audio.
Arquitectura de audio Bluetooth LE en banda específica del proveedor
La arquitectura de banda de VSAP permite que una canalización personalizada envíe y reciba datos de audio Bluetooth LE de la pila de controladores de audio específicos del proveedor a la HCI del controlador Bluetooth. Esta arquitectura incluye un nuevo componente, el "Componente de combinación ISO de IHV". Este componente es responsable de administrar el control de flujo de los datos ISO. También compartirá el control de flujo de comandos HCI con la pila central de Bluetooth de Windows en caso de que necesite enviar algún comando HCI.
El siguiente diagrama muestra una arquitectura de Audio Bluetooth LE en banda específica del proveedor.
Diseño detallado
Requisitos de formato de audio
KSAUDIO_PACKETSIZE_CONSTRAINTS2
Se requieren controladores de audio ACX de IHV para admitir la propiedad KSAUDIO_PACKETSIZE_CONSTRAINTS2. La compatibilidad con esta propiedad reduce el tiempo entre agregar un dispositivo de audio Bluetooth LE a windows y el dispositivo de audio que está disponible para las aplicaciones para el streaming.
Duraciones de fotogramas de audio
Los perfiles de audio Bluetooth LE permiten a las implementaciones admitir el streaming de audio con duraciones de fotogramas de 7,5 milisegundos o 10 milisegundos. Windows requiere códecs proporcionados por IHD para admitir ambas duraciones de fotogramas. Este requisito garantiza la interoperabilidad con dispositivos accesorio Bluetooth LE Audio y la coexistencia de calidad con otros dispositivos Bluetooth LE conectados al sistema.
Definiciones del modo de procesamiento de señal
Bluetooth LE Audio admite una amplia gama de formatos de streaming para admitir diferentes escenarios de usuario. Las especificaciones BAP y TMAP definen formatos admitidos obligatorios para la certificación. Windows aplica modos de procesamiento de señal de audio para correlacionar el formato que se va a usar con el escenario que está realizando el sistema. Los controladores de audio compatibles con Bluetooth LE Audio indicarán la compatibilidad con los modos y formatos de procesamiento de señal en la tabla siguiente. Además, Bluetooth LE Audio no admite el modo de procesamiento de señal sin procesar, por lo que los controladores de audio no anunciarán ningún formato compatible para este modo.
Formatos de procesamiento de secuencias de transmisión de unidifusión y modos de procesamiento de señal
Bluetooth LE Audio requiere que los formatos de audio de representación de unidifusión se declaren para los siguientes modos de procesamiento de señal:
- Valor predeterminado (AUDIO_SIGNALPROCESSINGMODE_DEFAULT)
- Este modo se usa para escenarios de representación unidireccional, como la reproducción de música, las notificaciones y el audio del juego de vídeo.
- Comunicaciones (AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS)
- Este modo se usa para escenarios bidireccionales, como llamadas de voz.
Las tablas siguientes son listas de formatos simétricos para cada caso de uso y modo de procesamiento de señal. La compatibilidad con formato asimétrico se define en estéreo de banda ancha super para escenarios de voz.
Los formatos de audio se ordenan de la mayoría de los preferidos a los menos preferidos.
Sonidos del sistema, reproducción de música y audio de videojuegos cuando se conecta a un dispositivo estéreo o conjunto coordinado de dispositivos
Modo de procesamiento de señal: valor predeterminado
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 48 kHz | 2 | 16 | 7.5 ms | 96 kbps | 48_3 |
| 48 kHz | 2 | 16 | 7.5 ms | 80 kbps | 48_1 |
| 48 kHz | 2 | 16 | 10 ms | 96 kbps | 48_4 |
| 48 kHz | 2 | 16 | 10 ms | 80 kbps | 48_2 |
| 32 kHz | 2 | 16 | 7.5 ms | 64 kbps | 32_1 |
| 32 kHz | 2 | 16 | 10 ms | 64 kbps | 32_2 |
| 24 KHz | 2 | 16 | 7.5 ms | 48 kbps | 24_1 |
| 24 KHz | 2 | 16 | 10 ms | 48 kbps | 24_2 |
Sonidos del sistema, reproducción de música y audio del juego de vídeo cuando está conectado a un único miembro de un conjunto coordinado (auriculares individuales o audífonos)
Modo de procesamiento de señal: valor predeterminado
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 48 kHz | 1 | 16 | 7.5 ms | 96 kbps | 48_3 |
| 48 kHz | 1 | 16 | 7.5 ms | 80 kbps | 48_1 |
| 48 kHz | 1 | 16 | 10 ms | 96 kbps | 48_4 |
| 48 kHz | 1 | 16 | 10 ms | 80 kbps | 48_2 |
| 32 kHz | 1 | 16 | 7.5 ms | 64 kbps | 32_1 |
| 32 kHz | 1 | 16 | 10 ms | 64 kbps | 32_2 |
| 24 KHz | 1 | 16 | 7.5 ms | 48 kbps | 24_1 |
| 24 KHz | 1 | 16 | 10 ms | 48 kbps | 24_2 |
| 16 kHz | 1 | 16 | 7.5 ms | 32 kbps | 16_1 |
| 16 kHz | 1 | 16 | 10 ms | 32 kbps | 16_2 |
Renderizar la grabadora de voz, llamadas VOIP o el audio de juegos de video con chat de voz
Modo de procesamiento de señal: Comunicaciones
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 32 kHz | 1 | 16 | 7.5 ms | 64 kbps | 32_1 |
| 32 kHz | 1 | 16 | 10 ms | 64 kbps | 32_2 |
| 24 KHz | 1 | 16 | 7.5 ms | 48 kbps | 24_1 |
| 24 KHz | 1 | 16 | 10 ms | 48 kbps | 24_2 |
| 16 kHz | 1 | 16 | 7.5 ms | 32 kbps | 16_1 |
| 16 kHz | 1 | 16 | 10 ms | 32 kbps | 16_2 |
Formatos de audio de secuencia de captura de unidifusión y modos de procesamiento de señal
Bluetooth LE Audio requiere que los formatos de audio de captura de unidifusión se declaren para el modo de procesamiento de señal predeterminado (AUDIO_SIGNALPROCESSINGMODE_DEFAULT). La lista de formatos de captura admitidos se encuentra en la tabla siguiente.
Los formatos de audio se ordenan de la mayoría de los preferidos a los menos preferidos.
Capturar grabadora de voz, llamadas VOIP o audio de videojuegos con chat de voz
Modo de procesamiento de señal: valor predeterminado
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 32 kHz | 1 | 16 | 7.5 ms | 64 kbps | 32_1 |
| 32 kHz | 1 | 16 | 10 ms | 64 kbps | 32_2 |
| 24 KHz | 1 | 16 | 7.5 ms | 48 kbps | 24_1 |
| 24 KHz | 1 | 16 | 10 ms | 48 kbps | 24_2 |
| 16 kHz | 1 | 16 | 7.5 ms | 32 kbps | 16_1 |
| 16 kHz | 1 | 16 | 10 ms | 32 kbps | 16_2 |
Modos de procesamiento de señal de audio de difusión
El audio Bluetooth LE de Windows requiere que se declaren los formatos de audio de origen de difusión (representación) para el modo de procesamiento de señal predeterminado (AUDIO_SIGNALPROCESSINGMODE_DEFAULT).
Windows Bluetooth LE Audio requiere que los formatos de audio del receptor de difusión (captura) se declaren para el modo de procesamiento de señal Default(AUDIO_SIGNALPROCESSINGMODE_DEFAULT).
La siguiente lista completa de formatos admitidos necesarios es idéntica para ambos roles.
Transmisión de difusión estéreo para sonidos del sistema, reproducción de música y audio del juego de vídeo
Modo de procesamiento de señal: valor predeterminado
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 48 kHz | 2 | 16 | 7.5 ms | 96 kbps | 48_3 |
| 48 kHz | 2 | 16 | 7,5 ms | 80 kbps | 48_1 |
| 48 kHz | 2 | 16 | 10 ms | 96 kbps | 48_4 |
| 48 kHz | 2 | 16 | 10 ms | 80 kbps | 48_2 |
| 24 KHz | 2 | 16 | 7,5 ms | 48 kbps | 24_1 |
| 24 KHz | 2 | 16 | 10 ms | 48 kbps | 24_2 |
Transmisión de difusión mono para sonidos del sistema, reproducción de música y audio de videojuegos
Modo de procesamiento de señal: valor predeterminado
| Frecuencia de muestreo | Recuento de canales | Profundidad de bits | Duración del fotograma | Velocidad de datos de audio | Id. de configuración del códec BAP (tabla 3.11 de la especificación BAP) |
|---|---|---|---|---|---|
| 48 kHz | 1 | 16 | 7,5 ms | 96 kbps | 48_3 |
| 48 kHz | 1 | 16 | 7,5 ms | 80 kbps | 48_1 |
| 48 kHz | 1 | 16 | 10 ms | 96 kbps | 48_4 |
| 48 kHz | 1 | 16 | 10 ms | 80 kbps | 48_2 |
| 24 KHz | 1 | 16 | 7,5 ms | 48 kbps | 24_1 |
| 24 KHz | 1 | 16 | 10 ms | 48 kbps | 24_2 |
| 16 kHz | 1 | 16 | 7,5 ms | 32 kbps | 16_1 |
| 16 kHz | 1 | 16 | 10 ms | 32 kbps | 16_2 |
Configuraciones y topologías de flujo definidas
Configuraciones de solo representación de unidifusión
Configuración básica del perfil de audio 1
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite secuencias mono. El único dispositivo puede ser un dispositivo independiente o un único miembro conectado de un conjunto coordinado.
| Ejemplos de casos de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Reproducción de contenido multimedia |
Representación: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 Captura: Ninguno |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: Alta confiabilidad |
| Llamada de voz sin micrófono en el dispositivo de audio |
Representación: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 Captura: Ninguno |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia |
| Reproducción de videojuegos |
Representación: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 Captura: Ninguno |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia |
Configuración básica del perfil de audio 4
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite secuencias estéreo. El dispositivo de audio es capaz de procesar dos canales de audio en un único CIS.
| Ejemplos de casos de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Reproducción de contenido multimedia |
Representación: modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: Asignación de canales de audio de alta fiabilidad: izquierda frontal y derecha frontal |
| Reproducción de videojuegos | Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia Asignación de canal de audio: frontal izquierda y derecha |
Configuración básica del perfil de audio 6(i)
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite secuencias estéreo. El dispositivo de audio solo es capaz de procesar un canal de audio en cada uno de los dos CIS.
| Ejemplos de casos de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Reproducción de contenido multimedia | Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: Alta confiabilidad |
| Llamada de voz sin micrófono en el dispositivo de audio | Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia Asignación de canal de audio: frontal izquierda o derecha |
| Reproducción de videojuegos | Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia Asignación de canal de audio: frontal izquierda y derecha |
Configuración básica del perfil de audio 6(ii)
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un conjunto coordinado de dispositivos de audio. El conjunto es capaz de procesar dos canales de audio con cada miembro que procesa un único canal.
| Ejemplos de casos de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Reproducción de contenido multimedia | Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: Alta confiabilidad |
| Llamada de voz sin micrófono en ninguno de los dispositivos | Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia |
| Reproducción de videojuegos | Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 Captura: Ninguno |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: baja latencia |
Configuraciones bidireccionales de unidifusión
Las configuraciones bidireccionales se usan cuando el perfil de audio Bluetooth LE detecta que una aplicación pretende crear una captura y representar una secuencia en un dispositivo remoto o un conjunto de dispositivos. Las aplicaciones controlan las secuencias de captura y representación por separado. Por lo tanto, los controladores de audio IHV y los controladores Bluetooth permitirán que el audio fluya a través de una sola dirección de un CIS bidireccional después del aprovisionamiento. Este aprovisionamiento usa los comandos HCI Configure Data Path (Configurar ruta de acceso de datos) y LE Setup ISO Data Path (Ruta de acceso de datos ISO de configuración de LE).
Configuración básica del perfil de audio 3
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El PC está conectado a un único dispositivo de audio con un flujo mono bidireccional establecido en un único CIS.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Llamada de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
| Reproducción de videojuegos con chat de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Configuración básica del perfil de audio 8(i)
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite secuencias de representación estéreo y secuencias de captura mono. El dispositivo es capaz de procesar un canal de audio en un único CIS para una dirección determinada.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Llamada de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 o 2 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
| Reproducción de videojuegos con chat de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 2 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Configuración básica del perfil de audio 8(ii)
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un conjunto coordinado de dispositivos de audio. Cada miembro del grupo recibe un canal de renderizado de audio. Un único miembro de un conjunto tiene un flujo de captura establecido. El miembro del conjunto con la secuencia de captura es el primer miembro del conjunto que se conecta al PC que también admite secuencias de captura.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Llamada de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 1 o 2 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
| Reproducción de videojuegos con chat de voz |
Renderizar: Modo de procesamiento de señal: Comunicaciones Recuento de canales: 2 Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Configuraciones de solo captura de unidifusión
Configuración básica del perfil de audio 2
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite secuencias de captura mono.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Llamada de voz sin altavoz en el dispositivo |
Hacer: Ninguno Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 1 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Configuración básica del perfil de audio 9(i)
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un único dispositivo de audio que admite el envío de datos de audio estéreo. El dispositivo es capaz de codificar un canal de audio en un único CIS.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Captura de micrófono multicanal |
Hacer: Ninguno Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Configuración básica del perfil de audio 9(ii)
El equipo está conectado a un único dispositivo de audio que admite secuencias de captura mono.
La siguiente configuración de audio se define en la tabla 4.1 de la especificación de Bluetooth BAP.
El equipo está conectado a un conjunto de dispositivos de audio. Cada miembro del conjunto envía un canal de audio al equipo.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Captura de micrófono multicanal |
Hacer: Ninguno Capturar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de CIS: 2 Recuento de CIG: 1 Configuración de QoS de BAP: latencia baja |
Si el dispositivo remoto o el conjunto de dispositivos admite audio bidireccional, la configuración de una secuencia de captura solo es la misma que para la bidireccional. Esta configuración permite realizar transiciones de solo escenarios de captura a escenarios bidireccionales sin necesidad de volver a crear las secuencias.
Configuraciones de origen de difusión
Configuración básica del perfil de audio 12
La siguiente configuración de audio se define en la tabla 4.2 de la especificación de Bluetooth BAP.
El PC está difundiendo un canal de audio mono.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Sonidos del sistema, reproducción de música |
Renderizar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de BIS: 1 BIG Count: 1 Configuración de QoS de BAP: alta confiabilidad |
| Audio del juego de vídeo |
Renderizar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de BIS: 1 BIG Count: 1 Configuración de QoS de BAP: latencia baja |
Configuración básica del perfil de audio 13
La siguiente configuración de audio se define en la tabla 4.2 de la especificación de Bluetooth BAP.
El EQUIPO está transmitiendo audio estéreo con cada canal que transmite por su propio BIS.
| Caso de uso | Configuración de audio de Windows | Configuración del controlador Bluetooth |
|---|---|---|
| Sonidos del sistema, reproducción de música |
Renderizar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 2 |
Recuento de BIS: 1 BIG Count: 1 Configuración de QoS de BAP: alta confiabilidad |
| Audio del juego de vídeo |
Renderizar: Modo de procesamiento de señal: valor predeterminado Recuento de canales: 1 |
Recuento de BIS: 1 BIG Count: 1 Configuración de QoS de BAP: latencia baja |
Estructuras de datos
Propiedades de la interfaz de audio Bluetooth LE definidas por Microsoft
Propiedades de creación de flujos
Las siguientes propiedades se comparten entre la pila de controladores de audio específicos del proveedor y el perfil de audio Bluetooth LE a través de los DDIsde ACXOBJECTBAG. Estas propiedades informan a las decisiones sobre la creación y configuración del punto de conexión de flujo, como se muestra en el escenario creación de flujos .
CapacidadesDelCódecBluetoothLEAudio
El controlador de audio establece esta propiedad para indicar la compatibilidad con las funcionalidades de streaming de audio compatibles con el controlador de audio o el DSP de audio. El valor de la propiedad se establece con el DDI AcxObjectBagAddBlob y el formato del valor es el mismo que un registro PAC que se define en la especificación PACS.
El perfil de audio de Bluetooth LE de Windows lee la propiedad para determinar las posibles configuraciones de códec y la composición del flujo de datos a utilizar.
| Campo | Octeto |
|---|---|
| Recuento de funcionalidades | 0 |
| Códec ID[i] | 1-6 |
| Longitud de funcionalidades específicas del códec[i] | 7 |
| Funcionalidades específicas del códec | 8... n |
| Longitud de metadatos (m) | n + 1 |
| Metadatos | n+2... m |
Los valores de campo se definen en las tablas 3.2 y 3.4 de la especificación PACS.
Bluetooth_DatapathID
El controlador de audio establece esta propiedad para indicar el identificador de ruta de acceso de datos usado como parámetro para los comandos HCI_LE_Setup_ISO_Data_Path y HCI_Configure_Data_Path. El valor de la propiedad se establece mediante la DDI AcxObjectBagAddUI8 .
El perfil de audio Bluetooth LE lee y usa esta propiedad como parámetro en los comandos HCI_Configure_Data_Path y HCI_LE_Setup_ISO_Data_Path. Este identificador se aplica a todas las secuencias isócrónicas creadas para el ACXSTREAM asociado al contenedor de objetos. Para asignar un identificador de ruta de acceso de datos diferente para cada conexión de secuencia, use KSPROPERTY_BtLeAudio_DATAPATH_ID en los controladores de audio.
| Campo | Octeto |
|---|---|
| Identificador de ruta de acceso de datos | 0 |
Si el controlador de audio no establece esta propiedad, el sistema operativo usa el valor 1 como parámetro para los comandos de HCI.
Configuración_deRutaDeDatosBluetooth
El controlador de audio establece esta propiedad para proporcionar configuraciones específicas del proveedor al controlador Bluetooth a través del comando HCI_Configure_Data_Path. No debe ser superior a 255 bytes, que es la carga más grande que acepta un controlador Bluetooth para un comando HCI. El valor de la propiedad se establece mediante acxObjectBagAddBlob DDI. Esta configuración se aplica a todos los identificadores de ruta de acceso de datos establecidos por el controlador de audio. Para asignar una configuración de ruta de acceso de datos diferente para cada identificador de ruta de acceso de datos, use KSPROPERTY_BtLeAudio_DATAPATH_CONFIG en los controladores de audio.
Bluetooth_RequiresHciTransportInD0ForStreaming
El controlador de audio establece esta propiedad para indicar que el controlador Bluetooth no pasará a un estado de baja potencia mientras una secuencia de audio está activa. El valor de la propiedad se establece mediante la DDI AcxObjectBagAddUI8 .
| Campo | Octeto |
|---|---|
| ActiveTransportRequired (se establecerá en 1) | 0 |
Bluetooth LE Audio Configuración de Códec
Esta propiedad será establecida por el perfil Bluetooth LE Audio mediante el DDI AcxObjectBagAddBlob después de haber configurado el códec con un dispositivo de audio. La estructura del valor es:
| Campo | Octeto |
|---|---|
| Recuento de configuraciones | 0 |
| Controlador de conexión de flujo[i] | 1-2 |
| Formato de codificación[i] | 3 |
| Id. de empresa[i] | 4-5 |
| Id. de códec específico del proveedor[i] | 6-7 |
| Longitud de configuración específica del códec[i] | 8 |
| Configuración específica del códec[i] | 9... n |
Los valores de campo se derivan de la tabla 4.3 de la especificación del servicio de control de secuencias de audio bluetooth.
La pila de controladores de audio específica del proveedor debe leer esta propiedad si el códec LC3 está en el controlador de streaming acX o en el DSP de audio.
BluetoothLEAudio_StreamConnectionHandles
Esta propiedad se establecerá mediante el perfil de audio Bluetooth LE para informar al controlador de audio de la lista de identificadores BIS o CIS creados para un BIG o CIG. El orden de los identificadores coincide con el orden devuelto por el controlador Bluetooth al comando HCI LE_Set_CIG_Parameters o el evento HCI LE_Create_BIG_Complete. La estructura del valor es:
| Campo | Tamaño | Octeto |
|---|---|---|
| Recuento de identificadores de conexión | 1 | 0 |
| Controlador de conexión[i] | 2 | 1-n |
Propiedades de Bluetooth LE Audio KS
KS Properties permite que el controlador de audio ACX de IHV establezca o actualice la configuración de la secuencia de audio después de crear la secuencia. Este escenario es útil para que los controladores de audio establezcan las opciones de configuración en función de las propiedades establecidas por el circuito de perfil bluetooth en el procedimiento de creación de flujo.
Definiciones
#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
Este KSProperty permite que los controladores de audio ACX de IHV establezcan o actualicen el valor establecido por Bluetooth_DatapathID después de invocar la devolución de llamada de la secuencia de creación. Esta propiedad también permite que los controladores de audio IHV asignen un identificador de ruta de acceso de datos diferente para cada entrada de configuración de códec en BluetoothLEAudio_CodecConfiguration. El valor de esta propiedad se establecerá en un único valor de byte para representar el identificador de ruta de acceso de datos usado para todas las configuraciones de códecs, o n bytes en los que n es igual al valor recuento de configuración establecido en la propiedad BluetoothLEAudio_CodecConfiguration. Si el valor contiene varios identificadores de ruta de acceso de datos, el orden de los identificadores se usará para la configuración del códec como se ordena en la propiedad BluetoothLEAudio_CodecConfiguration.
KSPROPERTY_BtLeAudio_DATAPATH_CONFIG
Esta KSProperty permite que los controladores de audio acX de IHV establezcan o actualicen la configuración de la ruta de acceso de datos tal como se define en Bluetooth_DatapathConfiguration. KSProperty será enviado por el controlador de audio al perfil bluetooth antes de invocar la devolución de llamada de la secuencia de audio de inicio. Esta propiedad se puede usar para establecer una única configuración para todas las rutas de acceso de datos en una sola dirección o para establecer una configuración de ruta de acceso de datos específica para cada entrada de configuración de códec establecida en BluetoothLEAudio_CodecConfiguration. Si el valor contiene varias configuraciones de ruta de acceso de datos, el orden de las configuraciones se usará para la entrada de configuración del códec como se ordena en la propiedad BluetoothLEAudio_CodecConfiguration. El número de configuraciones de códec será igual al número de identificadores de ruta de acceso de datos establecidos por KSPROPERTY_BtLeAudio_DATAPATH_ID o Bluetooth_DatapathID.
| Campo | Tamaño | Importancia |
|---|---|---|
| Recuento de configuraciones | 1 byte | 1 o recuento de configuración de códec establecido en BluetoothLEAudio_CodecConfiguration |
| Tamaño de configuración[i] | 1 byte | No superará los 255 |
| Configuración[i] | Tamaño de configuración[i] |
Interfaces
Identificadores de enlace de plantilla de extremo de audio
Usado por la fábrica de circuitos ACX del controlador de audio para saber cuándo se crea un circuito ACX para un dispositivo Bluetooth emparejado.
Los siguientes identificadores de componente se usan para crear circuitos de audio Bluetooth LE:
// {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);
Interfaz de compatibilidad con audio Bluetooth LE
Lo usa la pila de controladores de audio para indicar que está disponible para la transmisión de Bluetooth LE Audio. Reloj de nivel de servicio de Audio Bluetooth de Windows para esta interfaz y espere hasta que se publique antes de habilitar la compatibilidad con Bluetooth LE Audio.
Los siguientes identificadores de interfaz se usan para publicar la interfaz de compatibilidad con audio Bluetooth LE:
// {BA02FA1B-0FD0-4A0F-A748-4FAE2E2D2F67}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE,
0xba02fa1b, 0x0fd0, 0x4a0f, 0xa7, 0x48, 0x4f, 0xae, 0x2e, 0x2d, 0x2f, 0x67);
Secuencias comunes
Las secuencias siguientes se ejecutan para escenarios de audio LE de unidifusión y difusión.
Inicialización del controlador de audio
Cuando el controlador IHV ACX Streaming se carga y determina que admite la transmisión de audio Bluetooth LE, mostrará compatibilidad con la tecnología mediante la creación de un objeto ACXFACTORYCIRCUIT y registrándose para enlaces de plantilla Bluetooth con ACX usando los identificadores definidos en Identificadores de enlace de plantilla de punto de conexión de audio.
Secuencias de audio de unidifusión
Creación de puntos de conexión
Cuando un dispositivo de audio LE está emparejado con el sistema, el perfil de audio bluetooth LE:
- Lee las funcionalidades de audio publicadas del dispositivo remoto.
- Detecta las funcionalidades compatibles con el controlador enviando los comandos HCI_Read_Local_Support_Codecs [v2] y HCI_Read_Local_Supported_Codec_Capabilities.
- Crea un ACXCIRCUIT con los formatos admitidos establecidos en función de las funcionalidades de códec compatibles con el controlador Bluetooth y el dispositivo de audio remoto. Si el controlador no admite ningún códec porque la compatibilidad está en el DSP de audio o el controlador de audio, entonces los formatos admitidos se establecen según los formatos admitidos por el dispositivo de audio remoto.
Una vez creado el ACXCIRCUIT , ACX solicita al generador de circuitos ACX del controlador de streaming ACX de IHV que cree un ACXCIRCUIT para el procesamiento de flujos.
Cuando se recibe una solicitud para crear un circuito, el controlador de streaming ACX de IHV:
- Crea objetos ACXCIRCUIT, ACXPIN, ACXOBJECTBAG y ACXSTREAMBRIDGE .
- Si el códec LC3 o el códec específico del proveedor se hospeda en el controlador de audio o DSP, entonces el controlador de streaming ACX de IHV establece la propiedad BluetoothLEAudio_CodecCapabilities en ACXOBJECTBAG.
- El controlador de streaming de ACX de IHV puede establecer Bluetooth_DatapathID o Bluetooth_DatapathConfiguration en ACXOBJECTBAG si se conoce en ese momento.
Una vez creados ambos circuitos, ACX invoca el callback EvtAcxPinConnected en el pin de puente del controlador ACX de IHV.
Cuando se invoca la devolución de llamada EvtAcxPinConnected , se invoca el controlador de streaming ACX de IHV:
- Recupera el pin de puente del circuito de perfil con AcxTarget... API para recuperar los formatos admitidos por el circuito de perfil.
- Recorre en iteración la lista de ACXDATAFORMATestablecidos por el circuito de perfil. Si el códec de audio Bluetooth se hospeda en el controlador de audio o en el DSP de audio, el controlador de audio IHV actualiza sus ACXDATAFORMAT con los formatos compatibles con el códec y el circuito de perfil. De lo contrario, todos los formatos se copian al pin host del controlador de streaming ACX de IHV.
- Establece la lista de formatos actualizada en el pin de puente si se crea un motor de audio para la descarga de streaming.
Una vez actualizados los formatos, ACX habilita ambas interfaces y se crea un punto de conexión de audio.
Creación de flujos
Cuando una aplicación solicita crear una secuencia de audio, ACX invoca las devoluciones de llamada EvtCircuitCreateStream registradas para cada circuito, empezando por el controlador de streaming ACX de IHV.
Cuando se invoca su devolución de llamada EvtCircuitCreateStream , el controlador de streaming ACX de IHV:
- Establece o actualiza las propiedades de Bluetooth_DatapathId y Bluetooth_DataPathConfiguration en el ACXOBJECTBAG asociado a ACXSTREAMBRIDGE.
- Crea un ACXSTREAM con callbacks establecidas para las transiciones de estado del flujo y el procesamiento de flujos en tiempo real
- Crea un elemento de motor de audio en la secuencia si la canalización de audio admite la transmisión de descarga.
- Agrega ACXSTREAM a su puente de flujo. Esto invoca el callback EvtCircuitCreateStream del perfil de audio Bluetooth LE.
Cuando se invoca su devolución de llamada EvtAcxCircuitCreateStream , el perfil de audio Bluetooth LE:
- Guarda las propiedades localmente desde el ACXOBJECTBAG configurado por el controlador de streaming ACX del IHV para futuras devoluciones de llamada durante la transición de transmisión.
- Realiza la operación de códec de configuración tal como se define en la especificación BAP. Los parámetros de la operación se derivan del ACXDATAFORMAT especificado en el callback EvtAcxCircuitCreateStream y se obtienen de los demás parámetros de flujo en el ACXOBJECTBAG o de las capacidades del códec compatibles con el controlador Bluetooth.
- Asigna recursos de flujo enviando el comando HCI LE Set CIG Parameters ( Parámetros de CIG del conjunto de HCI).
- Establece la propiedad BluetoothLEAudio_StreamConnectionHandles con la lista de identificadores de conexión CIS devueltos por el controlador Bluetooth.
- Establece la propiedad BluetoothLEAudio_CodecConfiguration en ACXOBJECTBAG con el valor utilizado para configurar los dispositivos de audio remoto.
Si el controlador de streaming de ACX de IHV necesita actualizar su identificador de ruta de acceso de datos o la configuración de ruta de acceso de datos en función de los valores del contenedor de objetos establecidos por el perfil, puede invocar las operaciones de conjunto de KSPROPERTY para actualizar el valor almacenado por el circuito de perfil.
- Crea un ACXSTREAM con callbacks establecidos para transiciones de estado del flujo.
Transiciones de estado de flujo
ACX decide el orden del circuito de las transiciones de estado de flujo en función del flujo de audio y si el estado está pasando a un estado más activo o menos activo.
- Para representar flujos que transicionan de un estado menos activo a uno más activo, el circuito de perfilado recibe primero el evento, seguido del circuito de transmisión.
- Para secuencias de renderización que pasan de un estado más activo a un estado menos activo, el circuito de renderización recibe primero el evento, seguido del circuito de perfil.
- En el caso de los flujos de captura que van de un estado menos activo a un estado más activo, el circuito de transmisión recibe primero el evento, seguido del circuito de perfil.
- En el caso de las secuencias de captura que van de un estado más activo a un estado menos activo, el circuito de perfil recibe primero el evento, seguido del circuito de streaming.
Preparación de la secuencia
Cuando se invoca su devolución de llamada EvtAcxStreamPrepareHardware , el perfil de audio Bluetooth LE envía la operación QoS de configuración de ASCS para sincronizar la configuración con el dispositivo remoto si es necesario. Es posible que la operación de QoS de configuración de ASCS ya se haya completado cuando se invocó la devolución de llamada para la otra dirección de una secuencia bidireccional.
Cuando se invoca su devolución de llamada EvtAcxStreamPrepareHardware , el controlador de streaming ACX de IHV asigna los recursos de streaming necesarios e inicializa la canalización de audio para que esté en estado adquirido.
Iniciar transmisión
Cuando se invoca su devolución de llamada EvtAcxStreamRun , el perfil de audio Bluetooth LE:
- Aplica los argumentos de configuración del controlador de streaming ACX, como se describe a continuación, mediante el comando HCI_Configure_Data_Path si han cambiado. La pila de Windows Bluetooth Core almacena en caché el búfer de Vendor_Specific_Config para cada par de Data_Path_Direction y Data_Path_ID. El comando HCI_Configure_Data_Path solo se envía cuando el Vendor_Specific_Config cambia para un par de Data_Path_Direction y Data_Path_ID.
- Data_Path_Direction es audioDirection de la devolución de llamada del circuito de streaming que emite la devolución de llamada EvtAcxStreamRun.
- El Data_Path_ID se rellena con el valor asignado más recientemente de cualquiera de los siguientes orígenes:
- Bluetooth_DatapathID en el ACXOBJECTBAG conectado al ACXSTREAMBRIDGE pasado al perfil de audio Bluetooth LE de Windows durante la devolución de llamada EvtCircuitCreateStream.
- Datos de KSPROPERTY_BtLeAudio_DATAPATH_ID.
- Los datos de Vendor_Specific_Config se rellenan con el valor asignado más recientemente de cualquiera de los orígenes siguientes:
- Bluetooth_DatapathConfiguration en el ACXOBJECTBAG conectado al ACXSTREAMBRIDGE pasado al circuito windows Bluetooth LE Audio Profile durante la devolución de llamada EvtCircuitCreateStream.
- Datos de KSPROPERTY_BtLeAudio_DATAPATH_CONFIG.
- Envía la operación de habilitación de ASCS a los dispositivos remotos.
- Crea CISes si aún no se han creado con el comando HCI_LE_Create_CIS.
- Si la ruta de acceso de datos aún no está configurada, el perfil de audio bluetooth LE:
- Establece las rutas de acceso de datos ISO mediante el comando HCI_LE_Setup_ISO_Data_Path
- Si el controlador de streaming ACX de IHV establece la propiedad BluetoothLEAudio_CodecCapabilities, el valor del campo Codec_ID de HCI_LE_Setup_ISO_Data_Path se establecerá en transparente (0x3) tal como se define en los números asignados por Bluetooth. De lo contrario, el valor será el mismo que el id. de códec usado en la operación de códec de configuración en el procedimiento de creación de flujos.
- Establece las rutas de acceso de datos ISO mediante el comando HCI_LE_Setup_ISO_Data_Path
- Si la secuencia de audio es una secuencia de captura, el perfil de audio Bluetooth LE realiza la operación de inicio listo del receptor BAP.
Cuando se invoca su devolución de llamada EvtAcxStreamRun , el controlador de streaming ACX de IHV comienza a procesar los datos de audio entrantes desde el sistema de audio de Windows (render) o el controlador Bluetooth (captura).
Pausar secuencia
Cuando se invoca su llamada de retorno EvtAcxStreamPause, el perfil de audio Bluetooth LE:
- Realiza el procedimiento de deshabilitación del flujo de unidifusión BAP.
- Elimina la ruta de datos ISO utilizando el comando HCI_LE_Remove_ISO_Data_Path.
- Realiza el procedimiento de preparación para detener el receptor ASCS si el flujo de audio es un flujo de captura de unidifusión.
- Desconecte CISes si no hay ningún otro flujo en uso para ese CIS.
Cuando se invoca su devolución de llamada EvtAcxStreamPause , el controlador de streaming ACX de IHV pausa su canalización de procesamiento de audio.
Flujo de lanzamientos
Cuando se invoca su devolución de llamada EvtAcxStreamReleaseHardware , el perfil de audio bluetooth LE:
- Envía la operación de liberación de ASCS al dispositivo de audio Bluetooth LE remoto
- Quita el CIG si todos los CISes están desconectados.
Cuando se invoca su devolución de llamada EvtAcxStreamReleaseHardware , el controlador de streaming ACX de IHV libera sus recursos de canalización de audio.
Desconexión de puntos de conexión
El perfil de audio Bluetooth LE de Windows actualiza el estado de conexión de un punto de conexión si el dispositivo de unidifusión remota no tiene una conexión LE-ACL al equipo o informa a través de sus contextos de audio disponibles PACS que no está disponible para transmisión. Cuando el punto de conexión está desconectado, el servicio de audio de Windows invalida las secuencias activas hacia el punto de conexión. Esto da lugar a que se produzcan las secuencias de pausa y liberación de la corriente.
Volumen y silenciación
El circuito de streaming ACX de IHV solo debe incluir elementos de volumen y silenciar si el controlador de streaming requiere un motor de audio. Al usar un motor de audio, las marcas de configuración deben establecerse como tales:
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.
Esto es necesario para permitir que los dispositivos de Bluetooth LE Audio utilicen los perfiles de control de volumen y micrófono definidos por Bluetooth SIG para los cambios de volumen y muteo de los dispositivos de audio de unidifusión.
Si el dispositivo remoto de audio Bluetooth LE no admite los servicios de control de volumen o micrófono, o el punto de conexión se crea para audio de difusión, entonces los elementos de volumen y silencio en el motor de audio servirán como medida de respaldo para manejar las solicitudes de cambio del sistema de audio. El sistema de audio de Windows controla los cambios en el volumen y silenciar. Si no hay un motor de audio y el dispositivo remoto no admite el volumen, o los servicios de micrófono, o el punto de conexión de audio es para la difusión de audio.
Eliminación de puntos de conexión
Se quita un punto de conexión de audio Bluetooth LE del sistema cuando se destruye el circuito de perfil o el circuito de streaming. El circuito de perfil se puede quitar cuando se quita el emparejamiento del dispositivo de unidifusión remota de Windows o la radio Bluetooth está deshabilitada.
- Cuando el perfil de audio Bluetooth LE de Windows quita su circuito, ACX deshabilita sus interfaces de punto de conexión para indicar al servicio de audio de Windows que se debe quitar el punto de conexión.
- Cuando las interfaces están deshabilitadas, el servicio de audio de Windows invalida las secuencias activas al punto de conexión de audio Bluetooth LE, esta operación da como resultado la pausa de la secuencia y libera las devoluciones de llamada que se invocarán en el circuito de streaming.
- Para completar la eliminación del punto de conexión, ACX invalida el circuito del controlador de streaming ACX de IHV, lo que da lugar a la invocación de la función de limpieza del circuito por parte del WDF.
- Cuando se invoca su devolución de llamada de limpieza, el controlador de streaming ACX de IHV libera su circuito.
Coexistencia de bluetooth LE y audio clásico
Windows se asegurará de que solo el audio clásico o el audio LE esté activo para un dispositivo de audio Bluetooth emparejado que admita ambas tecnologías. Si el audio LE está activo, los DDIs de banda lateral para A2DP y HFP para el dispositivo remoto están deshabilitados y el circuito de perfil se crea para el punto de conexión de audio LE. Si el audio clásico está activo, los DDIs de banda lateral para A2DP y HFP para el dispositivo remoto están habilitados y el circuito de perfil no se crea para el punto de conexión de audio LE.
Administración de energía
Bluetooth LE Audio no tiene ningún requisito de administración de energía ni fluye fuera de lo que ya está definido por WDF.
Estéreo de banda ancha super para escenarios de voz
La experiencia de audio Bluetooth actual es cómoda, pero tiene limitaciones, especialmente en comparación con las experiencias de audio cableadas. Una limitación clave, con consecuencias orientadas al usuario, es la caída al audio mono cada vez que el micrófono está activo. Esto bloquea experiencias como el audio espacial en Teams y otras aplicaciones voIP del trabajo, y reduce en gran medida las experiencias de juego que implican chat de voz.
El audio Bluetooth LE cierra la brecha con una fidelidad de audio mejorada y una latencia reducida agregando compatibilidad con la reproducción estéreo mientras el micrófono está en uso.
Pares de formato de representación y captura
Una solución IHV anuncia su compatibilidad con la representación estéreo con captura mono proporcionando una lista de pares de formato de representación/captura, cada uno de los cuales consta de un formato de representación estéreo y un formato de captura mono que se puede usar simultáneamente para el streaming bidireccional. Un formato de representación estéreo (o captura mono) se define como un par de un Sampling_Frequency (por ejemplo, 16/24/32/48 kHz) y un Audio_Channel_Count (por ejemplo, 1/2 ch) asociado a un códec de audio específico, que no está limitado a LC3.
Por ejemplo, supongamos que una solución IHV admite la representación estéreo de 16kHz con captura mono de 16kHz y representación estéreo de 48 kHz con captura mono de 24kHz o 32 kHz. Los pares de formato de representación y captura correspondientes tienen este aspecto:
| Entrada | Formato de representación | Formato de captura |
|---|---|---|
| 1 | Render(16 kHz, 2 ch) | Capture(16 kHz, 1 ch) |
| 2 | Render(48 kHz, 2 ch) | Capture(24 kHz, 1 ch) |
| 3 | Render(48 kHz, 2 ch) | Capture(32 kHz, 1 ch) |
Tabla 3: Pares de formato de representación y captura de ejemplo
Dado que un miembro del conjunto coordinado puede unirse o desenlazarse en cualquier momento, una solución IHV debe admitir la representación mono con captura mono en las mismas frecuencias de muestreo respectivas para cada entrada en los pares de formato. Esto significa que, dado el ejemplo de la tabla 3, todos los pares de formato siguientes también deben admitirse implícitamente aunque no se declaren explícitamente:
| Entrada | Formato de representación | Formato de captura |
|---|---|---|
| 1 | Render(16 kHz, 1 ch) | Capture(16 kHz, 1 ch) |
| 2 | Render(48 kHz, 1 ch) | Capture(24 kHz, 1 ch) |
| 3 | Render(48 kHz, 1 ch) | Capture(32 kHz, 1 ch) |
Tabla 4: Pares de formato de representación/captura implícitos para la tabla 3
La principal diferencia entre la tabla 3 y la tabla 4 es que el Audio_Channel_Count para cada formato de representación en este último se establece en uno (para "representación mono"); todo lo demás permanece igual.
Pares de formato de representación y captura obligatorios
En la tabla 5 se define la lista de formatos de audio que admitirán todas las soluciones de IHV:
| Entrada | (Render_format, Capture_format) |
|---|---|
| 1 | { Render(48 kHz, 2 ch), Capture(32 kHz,1 ch) } |
| 2 | { Render(32 kHz, 2 ch), Capture(32 kHz,1 ch) } |
| 3 | { Render(24 kHz, 2 ch), Capture(24 kHz,1 ch) } |
| 4 | { Render(16 kHz, 2 ch), Capture(16 kHz,1 ch) } |
Tabla 5 Pares de formato de representación y captura obligatorios
Anuncio de funcionalidades
Dependiendo de si el controlador Bluetooth admite el códec de audio implicado (el valor predeterminado es LC3), una solución IHV anuncia la lista de pares de formato de representación y captura que admite de diferentes maneras. Concretamente:
Si el códec está en el controlador Bluetooth, tanto el controlador como el controlador de streaming ACX de IHV anunciarán las listas de pares de formato de forma independiente. Si las dos listas no están de acuerdo entre sí, Windows intersecará y mantendrá las partes comunes.
Si el códec no está en el controlador Bluetooth (por ejemplo, está en el DSP de audio), solo se requiere el controlador de streaming ACX de IHV para anunciar la lista de pares de formato. Controlador Bluetooth
Dado que el Codec_Capability[i] en la respuesta de un HCI_Read_Local_Supported_Codec_Capabilities no admite metadatos, el controlador Bluetooth es necesario para admitir una familia de identificadores de códec específicos de Microsoft (vea la tabla 7) de modo que Windows pueda consultar más funcionalidades de códec, por ejemplo, la lista de pares de formato de representación y captura, que no se pueden transmitir fácilmente a través de la interfaz HCI existente.
| Parámetro | Tamaño (octetos) | Description |
|---|---|---|
| Codec_ID | 5 |
Octeto 0: 0xFF (específico del proveedor) Octeto 1 a 2: 0x0006 (Microsoft) Octeto de 3 a 4: Id. de códec definido por el proveedor Si el bit más significativo de octeto 4 se establece en cero (0), octeto 3 contiene un formato de codificación aprobado por SIG (que va desde 0x00 hasta 0x07 a partir del 31 de mayo de 2024), excepto para 0xFF. Si el bit más significativo de octeto 4 se establece en uno (1), octeto 3 contiene un formato de codificación que todavía está definido y está reservado por Windows para su uso futuro. |
Tabla 7 Id. de códec específico de Microsoft
Los ámbitos de estos identificadores de códec específicos de Microsoft están limitados a:
- HCI_Read_Local_Supported_Codecs [v2]
- HCI_Read_Local_Supported_Codec_Capabilities
Por contrato, Windows no usará ninguno de estos identificadores de códec específicos de Microsoft para otros tipos de comandos de HCI.
HCI_Read_Local_Supported_Codecs [v2]
El controlador anunciará su compatibilidad con el identificador de códec específico de Microsoft a través de Vendor_Specific_Codec_ID y Vendor_Specific_Codec_Transport:
| Campo | Description |
|---|---|
| Vendor_Specific_Codec_ID[k] |
Octetos de 0 a 1: Id. de empresa (0x0006) Para obtener más información, vea Octet 1 a 2 en la tabla 7. Octetos de 2 a 3: Identificador de códec definido por el proveedor (por ejemplo, 0x0006 para LC3) Para obtener más información, vea Octet 3 a 4 en la tabla 7. |
| Vendor_Specific_Codec_Transport[k] | se debe admitir LE_CIS (0x02). |
Tabla 8 HCI_Read_Local_Supported_Codec valor de respuesta [v2]
HCI_Read_Local_Supported_Codec_Capabilities
Para consultar todas las funcionalidades de códec específicas de Windows, incluida la lista de pares de formato de representación y captura, Windows llama a HCI_Read_Local_Supported_Codec_Capabilities con los argumentos siguientes:
| Parámetro | Tamaño (octetos) | Description |
|---|---|---|
| Codec_ID (id. de códec específico de Microsoft) | 5 |
Octeto 0: 0xFF (específico del proveedor) Octeto de 1 a 2: Id. de empresa (0x0006) Para obtener más información, vea Octet 1 a 2 en la tabla 8. Octeto de 3 a 4: Identificador de códec definido por el proveedor (por ejemplo, 0x0006 para LC3) Para obtener más información, vea Octet 3 a 4 en la tabla 8. |
| Logical_Transport_Type | 1 | 0x2 (LE CIS) |
| Dirección | 1 | 0x00 (entrada, por ejemplo, Host a controlador) |
Tabla 9 HCI_Read_Local_Supported_Codec_Capabilities argumentos de comando
Al recibir este comando, el controlador devolverá todas las funcionalidades específicas de Windows para el códec especificado por el identificador de códec definido por el proveedor. Por ejemplo, si el identificador de códec definido por el proveedor está establecido en 0x0006, el controlador devolverá todas las funcionalidades relacionadas con LC3 requeridas por Windows.
La respuesta del comando mantiene la misma estructura de nivel superior que la definida por la especificación de Bluetooth Core:
| Parámetro | Tamaño (octetos) | Description |
|---|---|---|
| Estado | 1 | 0x00 (Correcto); 0x01 a 0xFF (código de error) |
| Num_Codec_Capabilities | 1 | Número total de funcionalidades devueltas. |
| Codec_Capability_Length[i] | 1 | Longitud del campo Codec_Capability[i]. |
| Codec_Capability [i] | Varía | Codec_Capability_Length[i] octetos de datos de funcionalidad específicos del códec. |
Tabla 10 estructura de respuesta HCI_Read_Local_Supported_Codec_Capabilities
Sin embargo, la carga de Codec_Capability[i] es diferente de la definida por el SIG y se adapta a Windows.
Actualmente, la única funcionalidad de códec definida por Windows es Bidirectional_Multichannel_Streaming, que se describe a continuación.
Bidirectional_Multichannel_Streaming
Al anunciar Bidirectional_Multichannel_Streaming, el controlador afirma que admite la representación simultánea del canal m con captura de canal n donde m ≥ 1, n ≥ 1 y m + n> 2. (La representación estéreo con captura mono es eficazmente una Bidirectional_Multichannel_Streaming con m = 2 y n = 1).
En esta tabla se describe el formato de Bidirectional_Multichannel_Streaming:
| Parámetro | Tamaño (octetos) | Bits | Description |
|---|---|---|---|
| Tipo 1 | 0x00 | (Bidirectional_Multichannel_Streaming) | |
| Channel_Counts | 1 | Bit 0 a 4: (m – 1), donde m es el número de canales de representación | (Para la representación estéreo con captura mono, debe tener el valor 2 – 1 = 1). |
| Channel_Counts | 1 | Bit 5 a 7: (n – 1), donde n es el número de canales de captura | (Para la representación estéreo con captura mono, debe tener el valor 1 – 1 = 0). |
| Render_Sampling_Frequencies | 1 |
Bit 0: 16 kHz Bit 1: 24 kHz Bit 2: 32 kHz Bit 3: 48 kHz Bit 4: RFU Bit 5: RFU Bit 6: RFU Bit 7: RFU |
Todas las frecuencias de muestreo de esta lista tienen el mismo recuento de canales que el especificado por el bit 0-4 de Channel_Count. Todos los bits RFU están reservados y deben establecerse en cero. |
| Capture_Sampling_Frequencies_-List[i], donde 0 ≤ i ≤ 7 | i + 1 |
Bit 0: 16 kHz Bit 1: 24 kHz Bit 2: 32 kHz Bit 3: 48 kHz Bit 4: RFU Bit 5: RFU Bit 6: RFU Bit 7: RFU |
Todas las frecuencias de muestreo de esta lista tienen el mismo recuento de canales que el especificado por el bit 5-7 de Channel_Count. Cada instancia de Capture_Sampling_Frequencies_List tiene un tamaño de octeto y puede haber hasta ocho instancias de este tipo (si todos los bits de Render_Sampling_Frequencies se establecen en uno). Todos los bits RFU están reservados y deben establecerse en cero. |
Tabla 11 Bidirectional_Multichannel_Streaming Formato (longitud máxima: 11 bytes)
Channel_Counts
La elección de recuentos de bits para la representación o captura es arbitraria: se asignan cinco bits para la representación (para cubrir todas las ubicaciones de audio definidas por SIG) y tres bits para la captura (para minimizar el tamaño de carga de HCI).
Por ejemplo, el Channel_Counts de la tabla 3 es 0b00000'0001 porque el número de canales de representación y captura, por ejemplo, m y n, son 2 y 1 respectivamente:
| Capture | Representación | |
|---|---|---|
| Bit | 7 6 5 | 4 3 2 1 0 |
| Valor | 0 0 0 | 0 0 0 0 1 |
Tabla 12 Channel_Counts para la tabla 3
Por diseño, todas las funcionalidades con el mismo par de id. de códec específico de Microsoft y Channel_Counts deben agruparse y representarse mediante un único registro Bidirectional_Multichannel_Streaming.
Render_Sampling_Frequencies
El campo Render_Sampling_Frequencies especifica todas las frecuencias de representación que se pueden usar en el contexto de la estructura de Bidirectional_Multichannel_Streaming asociada.
Por ejemplo, el Render_Sampling_Frequencies de la tabla 3 es 0b0000'1001, lo que significa que tanto 16kHz como 48kHz se pueden usar como frecuencia de muestreo para la representación de dos canales:
| Khz | RFU | RFU | RFU | RFU | 48 | 32 | veinticuatro | 16 |
|---|---|---|---|---|---|---|---|---|
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Valor | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
Tabla 13 Render_Sampling_Frequencies para la tabla 3
Capture_Sampling_Frequencies_List[i]
Para cada bit "uno" en Render_Sampling_Frequencies, a partir del menos significativo al más significativo, el controlador proporcionará una máscara de bits única (Capture_Sampling_Frequencies_List[i]) que especifique todas las frecuencias de captura que sean compatibles con la frecuencia representada por ese bit de representación. El controlador no proporcionará una máscara de bits Capture_Sampling_Frequencies para ningún bit "cero" en Render_Sampling_Frequencies.
Por ejemplo, las máscaras de bits de captura para la tabla 3 tienen este aspecto:
// 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
}
Concretamente:
| Render_Sampling_-Frequencies | Yo | Capture_-Sampling_-Frecuencias[i] | Description |
|---|---|---|---|
| 0b0000'1001 ⇤ orden ↤ |
0 | 0b0000'0001 | El primer bit menos significativo "uno" (bit 0) en Render_Sampling_Frequencies corresponde a 16 kHz. Habilite el bit 0 de Capture_Sampling_Frequencies_List[0] para indicar que la captura de 16 kHz se puede emparejar con esa frecuencia de representación. |
| 0b0000'1 001 ⇤ orden ↤ |
1 | 0b0000'0110 | El segundo bit menos significativo "uno" (bit 3) en Render_Sampling_Frequencies corresponde a 48 kHz. Habilite el bit 1 y el 2 de Capture_Sampling_Frequencies_List[1] para indicar que la captura de 24 kHz y 32 kHz se puede emparejar con esa frecuencia de representación. |
Tabla 14 Ejemplo para crear un Capture_Sampling_Frequencies_List[i] para un Render_Sampling_Frequencies
Controlador de streaming de ACX de IHV
Para admitir la representación estéreo con captura mono, un controlador de streaming ACX de IHV establece la propiedad del dispositivo, BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities, que representa los pares de formato de representación y captura descritos en 3.11.2, en una instancia de la clase de interfaz de dispositivo, GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE.
La propiedad debe estar disponible inmediatamente después de crear la instancia de clase de interfaz de dispositivo y el valor de la propiedad permanece constante durante toda la vigencia de la instancia de clase de interfaz de dispositivo.
La clave de propiedad de BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities se define como:
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[])
El tipo de valor de propiedad asociado a la clave, DEVPKEY_BluetoothLEAudioBidirectionalMultichannelStreamingCapabilities, se define como:
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)
La estructura BTH_LE_AUDIO_BIDIRECTIONAL_MULTICHANNEL_STREAMING_CAPABILITY sigue reglas similares como se describe en Bidirectional_Multichannel_Streaming, salvo que:
El controlador de streaming de ACX es necesario para establecer una marca adicional, IsCodecPresent, para indicar si el códec de interés forma parte conceptualmente del controlador de streaming ACX. Por ejemplo, si el códec está en el DSP de audio, IsCodecPresent debe establecerse en TRUE. Si el códec está en el controlador Bluetooth, la marca debe establecerse en FALSE.
En el caso de la representación de canal m con captura de canal n, los valores de RenderChannelCount y CaptureChannelCount son m y n, respectivamente. En otras palabras, RenderChannelCount y CaptureChannelCount indican el número real de canales de representación y captura.
Dado un índice, i, hay una asignación uno a uno entre el bit menos significativo de RenderSamplingFrequencies y la entrada i-th de CaptureSamplingFrequenciesList. Si el bit i-th de RenderSamplingFrequencies es cero, establezca CaptureSamplingFrequenciesList[i] en cero.
El código de ejemplo siguiente muestra cómo crear la interfaz de dispositivo GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE y establece la propiedad de interfaz de dispositivo 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;
}
Artículos relacionados
- Extensiones de clase de audio de ACX
- Especificación de perfil de audio básico de Bluetooth
- Especificación de Bluetooth Core 5.3
- Especificación del Servicio de Capacidades de Audio Publicadas Bluetooth
- Especificación del servicio de control de secuencias de audio Bluetooth
- Números asignados por Bluetooth
- Directrices de omisión de Bluetooth HFP para controladores de audio
- Bluetooth HFP omite el streaming de audio