本主题提供构成 ACX 音频驱动程序基础的音频类扩展 (ACX) 对象的概要摘要。 有关 ACX 的一般概述,请参阅 ACX 音频类扩展概述。
ACX 对象是 Windows 驱动程序框架 (WDF) 对象 - WDFOBJECT。 有关 WDF 的详细信息,请参阅 框架对象简介。 有关 WDF 对象的摘要,请参阅 框架对象的摘要。
ACX 对象层次结构
在 ACX(如 WDF 中),驱动程序对象是根对象,所有其他对象都是其子/后代。 所有 ACX 对象都是驱动程序对象的子对象,可以通过其他 ACX 或 WDF 对象直接或间接地继承。 ACX 驱动程序可以在创建时指定 ACX 对象的父级。 如果未指定父级,ACX 将使用默认父级,如这些部分所述。
创建非 ACX WDF 对象
除了 ACX 对象,音频驱动程序还可以根据需要创建和使用其他 WDF 对象。 如果驱动程序计划枚举非 ACX 设备,则应使用与创建 ACX/WDF 设备时创建的默认 WDF 子列表不同的子列表来执行此作。 驱动程序可以使用 WdfChildListCreate 创建新的 WDF 子列表,如 在函数驱动程序中创建设备对象中所述。 有关 WDF 对象的一般信息,请参阅 Windows Driver Foundation 的框架对象、WDF 体系结构和开发驱动程序简介。 有关初始化 ACX 设备的信息,请参阅 AcxDeviceInitialize。
ACX 电路
AcxCircuit 表示用户感知音频设备(扬声器、麦克风等)的部分或完整音频路径。 AcxCircuit 至少有一个输入引脚和一个输出引脚(ACXPIN),它可以聚合一个或多个类似 AcxElements 的对象。 默认情况下,AcxElements 按组装顺序被“连接”。
音频线路是 ACX 的核心构建基块。 在新 ACX 框架中,音频驱动程序创建一个或多个 ACX 线路对象来表示部分或完整的音频数据/控制路径。 ACX 将这些 ACX 线路对象组合在一起,以创建表示音频终结点的完整音频路径。 ACX 负责管理 ACX 线路及其依赖项。 可以在初始化时静态定义这些电路的顺序,也可以在运行时动态定义。
ACX 框架中的音频终结点是一个或多个 ACX 线路的集合。 多线路音频路径中的每个 ACX 线路都必须属于不同的 PnP 设备堆栈。 ACX 驱动程序可以在初始化时创建一个或多个线路,或者它可以在运行时创建线路,作为外部事件的副作用,例如检测新的音频组件后,或者因为它将自己注册到 ACX 作为特定线路类型的工厂,ACX 框架要求工厂组件创建该类型的新线路(请参阅本主题后面所述的 ACX 线路管理器/工厂)。
AcxCircuit 可能有一个或多个流。
AcxCircuit 具有专用 WDF 队列。 有关 WDF 队列的详细信息,请参阅 框架队列对象。
ACX 线路的 DDI 在 acxcircuit.h 标头中介绍。
ACX 引脚
就像在 WDM Portcls 音频驱动程序中一样,AcxPin 对象表示逻辑连接(而不是物理连接),数据流从系统通信总线输入适配器或从适配器输入系统通信总线。
Pin 的 DDI 在 acxpin.h 头文件中介绍。
ACX 流媒体
AcxStream 表示特定线路硬件上的音频流。 AcxStream 可以聚合一个或多个类似 AcxElements 的对象。 默认情况下,AcxElements 根据组装的顺序进行连接。 AcxStream 仅与一个 ACX 线路相关联。
- AcxStream 具有专用 WDF 队列。 有关 WDF 队列的详细信息,请参阅 框架队列对象
- AcxStream 支持不同的状态。 这些状态指示音频何时流动(RUN 状态)或未流动(暂停或停止状态)。
- 目前 ACX 支持两种类型的流:非流式处理线路使用的基本 ACX 流对象,以及流式传输线路使用的 ACX RT 流对象。
流的 DDI 在 acxstreams.h 标头中定义。
ACX 目标
WdfIoTarget 是一个 WDF 抽象,用于促进两个不同的堆栈之间的通信。 有关 WDF IO 目标的详细信息,请参阅 I/O 目标简介。
- 驱动程序使用 AcxTargetCircuit 与不同堆栈公开的远程电路进行通信。 AcxTargetCircuit 是使用 WdfIoTarget 实现的。
- 驱动程序使用 AcxTargetPin 与由其他不同堆栈公开的远程电路的引脚通信。 AcxTargetPin 是使用 WdfIoTarget 将消息发送到远程固定实体实现的。
- 驱动程序使用 AcxTargetElement 与其他堆栈公开的远程线路元素通信。 AcxTargetElement 是使用 WdfIoTarget 将消息发送到远程元素实体实现的。
- 驱动程序使用 AcxTargetStream 与其他堆栈公开的远程线路流通信。 AcxTargetStream 是使用 WdfIoTarget 实现的,用于创建远程流并更改远程流的状态。
- 驱动程序使用 AcxTargetFactoryCircuit 与远程线路工厂实例通信。 AcxTargetFactoryCircuit 是使用 WdfTarget 将消息发送到远程电路工厂实现的。
上述每个 ACX 类型都支持与远程线路交互的属性、方法和事件。 所有这些类型都是基于 WdfIoTarget 对象构建的。
目标 DDI 在 acxtargets.h 头文件中定义。
ACX 流媒体桥
AcxStreamBridge 对象由线路用来传播流创建、流的状态转换和线路段之间的 DRM 设置。 此对象仅在多线路(音频复合)方案中使用。 驱动程序可以将一个或多个 ACXSTREAMBRIDGE 对象关联到网桥引脚。 桥接引脚是 ACXPIN,它在逻辑上连接到另一电路中的相应 ACXPIN。
acxstreams.h 标头中介绍了 Stream 的 DDI。
ACX 音频引擎节点线路布局示例
下图演示了 ACX 线路。 主机引脚和卸载引脚是电路的输入部分,它们包含一个可用于回声消除的环回引脚。 输出可以是连接到扬声器的桥接插针。
请注意,驱动程序不需要执行显式连接的步骤,因为线路/元素的连接顺序与添加到线路的顺序相同。
默认情况下,ACX连接从电路的ACX请求接收引脚开始的元素,并结束于用于渲染和捕获设备的电路设备桥接引脚。
ACX 管理器
ACX 管理器用于系统任务,例如支持复合音频终结点。 这些类型的终结点由来自相同或不同供应商的一个或多个驱动程序堆栈管理。 客户端可以在 ACPI 中预配置此配置,或者直接使用 ACX 管理器的 DDI。 ACX 管理器的 DDI 在 acxmanager.h 标头中介绍。
ACX 对象包
ACX 对象包用于存储各种数据类型。 ACXOBJECTBAG 可以在各种 DDI 中作为参数传递。 Object Bag 的 DDI 在 acxmisc.h 标头中介绍。
ACX 对象摘要
下表列出了所有 ACX 对象,并提供有关每个对象的一些基本信息。
| 句柄 | 名称 | 目的 |
|---|---|---|
| ACXMANAGER | ACX 管理器 | 用于管理和控制其他对象的 ACX Manager 对象。 |
| ACXOBJECTBAG | 对象包 | 用于存储与对象相关的数据。 |
| ACXEVENT | ACX 事件 | 对于 KS(内核流式传输)事件。 |
| ACXEVENTDATA | 事件数据 | 与事件关联的数据。 |
| ACXPNPEVENT | Pnp 事件 | 用于即插即用活动。 |
| ACXCIRCUIT | Circuit | 本主题中所述的 ACX 线路。 |
| ACXPIN | 针 | ACX 引脚对象表示逻辑连接,本主题中对此进行介绍。 |
| ACXELEMENT | 元素 | 用于表示可添加到 AcxCircuit 或 AcxStream 的任何元素,例如 AcxVolume |
| ACXAUDIOENGINE | 音频引擎 | ACX 音频引擎用于渲染电路中以表示 DSP。 |
| ACXSTREAMAUDIOENGINE | 流音频引擎 | 在呈现流中用于表示数字信号处理器(DSP)。 |
| ACXKEYWORDSPOTTER | 关键词发现器 | 用于捕获线路中的关键字定位器,用于音频流中的关键字检测。 |
| ACXVOLUME | 音量 | 用于表示音量、增益、提升。 |
| ACXMUTE | 静音 | 用于表示静音元素。 |
| ACXJACK | 千斤顶 | 用于表示音频插孔或其他物理连接器。 |
| ACXMICARRAYGEOMETRY | 麦克风数组几何图形 | 用于表示麦克风数组几何图形,例如麦克风的位置。 |
| ACXPEAKMETER | 峰值计量 | 当硬件支持峰值计量功能时使用。 |
| ACXSTREAM | Stream | 用于表示线路创建的音频流,如本主题所述。 |
| ACXDATAFORMAT | 数据格式 | 数据格式表示音频设备支持的数据格式。 |
| ACXDATAFORMATLIST | 数据格式列表 | 可供使用的音频数据格式的列表。 |
| ACXTARGETCIRCUIT | 目标电路 | 用于与其他堆栈公开的远程线路通信。 |
| ACXTARGETPIN | 目标引脚 | 用于与不同堆栈公开的远程电路引脚进行通信。 |
| ACXTARGETELEMENT | 目标元素 | 用于表示可添加到 AcxCircuit 或 AcxStream 的目标元素,例如 AcxVolume |
| ACXTARGETSTREAM | 目标流 | 用于与其他堆栈公开的远程电路的数据流通信。 |
| ACXTARGETFACTORYCIRCUIT | Target电路工厂 | 用于与远程电路工厂通信。 |
| ACXSTREAMBRIDGE | 流桥 | 用于电路在电路段之间传播流创建、状态转变和DRM。 |
| ACXCOMPOSITE | 复合 | 用于表示多线路/多堆栈/多供应商流体系结构。 |
| ACXCOMPOSITEFACTORY | 复合工厂 | 创建复合音频线路的工厂。 |
| ACXFACTORYCIRCUIT | 工厂电路 | 使用特定模板创建线路的工厂。 |
| ACXCIRCUITMANAGER | 线路管理器 | 用于动态线路创建的线路提供程序。 |
| ACXCOMPOSITETEMPLATE | 复合模板 | 复合模板表示部分或完整的音频绑定。 复合模板可以有一个或多个线路模板。 |
| ACXCIRCUITTEMPLATE | 线路模板 | 线路模板表示部分音频路径。 |
| ACXAUDIOMODULE | 音频模块 | 自定义第三方插件功能。 |
以下 ACX 对象用于存储线路、流和线路工厂信息。
| 句柄 | 目的 |
|---|---|
| ACXCIRCUIT_INIT | 存储 ACX 线路初始化数据 |
| ACXSTREAM_INIT | 存储 ACX 流初始化数据 |
| ACXFACTORYCIRCUIT_INIT | 存储 ACX 线路工厂使用的初始化数据 |