支持音频状况

概述

设备可用于不同的姿势。 对于平板电脑,姿势基本上意味着其保留的方向,如纵向或横向。 这些设备的音频体验可以针对特定姿势进行优化。 例如,音频终结点可以重新映射左/右声道,以便在不同的方向上获得适当的立体声体验。 还可以根据更改的扬声器/麦克风位置,根据姿势变化来校准麦克风,以便抑制噪音、回声取消等。

Windows OS 支持

Windows 11 版本 22000 及更高版本中支持音频状态。

体系结构

音频终结点的与姿势相关的方案基于 Shell 对姿势更改的响应。 Shell 适用于传感器和用户输入(例如方向锁),以确定系统的整体状况。 OS 音频堆栈从 Shell 接收状态通知,并通知支持音频姿势 DDI 的音频终结点。

音频堆栈不会更改音频流内容,以响应姿势更改。 相反,音频堆栈会通知音频驱动程序这些更改。 期望 IHV 音频组件适应这些更改,并在硬件(DSP)或软件 APO 中实现信号处理。

对于桌面电脑,音频终结点的姿势相关方案与显示器保持一致。 OS 音频堆栈从显示器接收姿势通知,并通知支持音频姿势 DDI 的音频终结点。

下图显示了处理音频设备状况更改所涉及的组件之间的关系和控制流。

Diagram showing the relationship between OS Shell, OS Audio, APO, PortCls, and Audio Driver in handling posture changes for audio devices.

组件

OS shell 和传感器

Shell 监视传感器驱动程序提供的各种传感器信息。 除了传感器信息,Shell 还考虑用户首选项(如方向锁和应用替代),以确定系统状况。

OS 音频堆栈

OS 音频堆栈从 Shell 接收状态信息。 发生系统状况更改时,音频堆栈会使用 KS 属性通知感知姿势的音频终结点。

IHV 音频驱动程序和 APO

IHV 音频驱动程序以及可选的 APO 处理 OS 音频堆栈中的姿势更改。 只有直接位于受姿势更改影响的计算机的主底盘上的载入音频设备应指示对姿势的支持。

音频终结点支持要求

下表显示了应和不应提供姿势支持的音频终结点类型。

音频终结点类型 状态支持
内置扬声器
内置麦克风/麦克风阵列
有线-头戴显示设备
HDMI/DisplayPort
外部 USB 音频
蓝牙音频

音频驱动程序要求

状态信息以方向的形式提供给 IHV 音频驱动程序。 IHV 音频驱动程序应对设备外形规格有隐式知识,并且必须能够识别默认方向和相对扬声器/麦克风位置。 此信息可以从 ACPI 或其他 IHV 机制检索。

数据结构和常量

PROP标准版TID

这是用于 KS 属性集 ID 的 GUID。

KSPROPSETID_AudioPosture =A3FB7B0D-474E-4F51-A379-51282DD4FA8F

属性 ID

这是用于 KSPROPERTY ID 的值。

KSPROPERTY_AUDIOPOSTURE_ORIENTATION = 1

属性说明 - AUDIOPOSTURE_ORIENTATION

此属性指定系统的当前方向。 方向由从默认方向旋转的程度表示。 方向信息与 OS Shell 同步,其中包括用户/应用方向锁。 处理KSPROPERTY_AUDIOPOSTURE_ORIENTATION的 Set 属性请求时,音频驱动程序会收到此枚举。

typedef enum
{
    AUDIOPOSTURE_PANEL_ORIENTATION_NOTROTATED = 0,
    AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED90DEGREESCOUNTERCLOCKWISE,
    AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED180DEGREESCOUNTERCLOCKWISE,
    AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED270DEGREESCOUNTERCLOCKWISE,
} AUDIOPOSTURE_ORIENTATION;

有关详细信息,请参阅 AUDIOPOSTURE_ORIENTATION枚举

属性处理

音频驱动程序必须实现 KSPROP标准版TID_AudioPosture – KSPROPERTY_AUDIOPOSTURE_ORIENTATION作为通过筛选器句柄访问的引脚属性。 桥钉上必须支持该属性,即表示终结点的硬件终结点的引脚。

基本支持 - KSPROPERTY_TYPE_BASICSUPPORT

音频驱动程序必须返回对“设置”和“访问标志”的支持。

标准版T – KSPROPERTY_TYPE_标准版T

音频驱动程序接收指向AUDIOPOSTURE_ORIENTATION作为属性请求值参数的指针。 为了响应此属性请求,音频驱动程序可以为新的姿势状态应用必要的硬件或软件更改。 返回成功表示驱动程序已完成处理更改。 如果 IHV APO 需要从音频驱动程序接收姿势信息,则可以使用音频模块来提供通知机制。 驱动程序必须缓存该值,以便在从低功率/休眠状态出来时应用该值

AUDIOPOSTURE_ORIENTATION Orientation = *((AUDIOPOSTURE_ORIENTATION*)PropertyRequest->Value);

switch (Orientation)
{
    case AUDIOPOSTURE_ORIENTATION_NOTROTATED:
    //Cache and process the orientation
    .
    .
    case AUDIOPOSTURE_ORIENTATION_ROTATED90DEGREESCOUNTERCLOCKWISE:
    //Cache and process the orientation
    .
    .
    case AUDIOPOSTURE_ORIENTATION_ROTATED180DEGREESCOUNTERCLOCKWISE:
    //Cache and process the orientation
    .
    .
    case AUDIOPOSTURE_ORIENTATION_ROTATED270DEGREESCOUNTERCLOCKWISE:
    //Cache and process the orientation
    .
    .
}

另请参阅

Windows 驱动程序模型 (WDM)

音频驱动程序概述