ACX 对象摘要

本主题提供构成 ACX 音频驱动程序基础的音频类扩展 (ACX) 对象的简短摘要。 有关 ACX 的一般概述,请参阅 ACX 音频类扩展概述

ACX 对象是 Windows 驱动程序框架 (WDF) 对象 - WDFOBJECT。 有关 WDF 的详细信息,请参阅框架对象简介。 有关 WDF 对象的摘要,请参阅框架对象摘要

注意

ACX 标头和库不包括在 WDK 10.0.22621.2428(2023 年 10 月 24 日发布)中,但在早期版本以及 WDK 的最新(25000 系列内部版本)预览体验预览版中可用。 有关 WDK 预览版本的详细信息,请参阅安装 Windows 驱动程序工具包 (WDK) 的预览版本

ACX 对象层次结构

在 ACX(如 WDF 中),驱动程序对象是根对象,而所有其他对象都是其子项/后代。 所有 ACX 对象都是直接或间接通过其他 ACX 或 WDF 对象的驱动程序对象的子项。 ACX 驱动程序可以在创建期间指定 ACX 对象的父项。 如果未指定父项,ACX 将使用默认父项,如这些部分所述。

Diagram illustrating the hierarchy of ACX objects, with WDFDEVICE at the top and major ACX objects like circuit and stream below.

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 Pin

就像在 WDM Portcls 音频驱动程序中一样,AcxPin 对象表示逻辑连接(而不是物理连接),数据流通过此连接从系统通信总线进入适配器或从适配器进入系统通信总线。

引脚的 DDI 在 acxpin.h 标头中描述。

ACX 流

AcxStream 表示特定线路硬件上的音频流。 AcxStream 可以聚合一个或多个类似 AcxElements 的对象。 默认情况下,AcxElements 按相同的汇编顺序“连接”。 AcxStream 仅与一个 ACX 线路关联。

  • AcxStream 具有专用 WDF 队列。 有关 WDF 队列的详细信息,请参阅框架队列对象
  • AcxStream 支持不同的状态。 这些状态指示音频何时流动(RUN 状态)或未流动(PAUSE 或 STOP 状态)。
  • 目前 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。

流的 DDI 在 acxstreams.h 标头中描述。

ACX 音频引擎节点线路布局示例

下图演示了 ACX 线路。 主机和卸载引脚是线路的输入,其中包含可用于回声消除的环回引脚。 输出可以是路由到扬声器的桥接引脚。

Diagram illustrating an ACX circuit with host, offload, and loopback pins on the left, and a bridge pin on the right, routed through an audio engine node.

请注意,线路/元素的连接顺序与将其添加到线路的顺序相同时,驱动程序不需要执行显式连接的步骤。

默认情况下,ACX 连接从线路的 ACX 请求接收器引脚开始的元素,并在呈现和捕获设备的线路设备桥接引脚结束。

ACX 管理器

ACX 管理器用于系统任务,例如支持复合音频终结点。 这些类型的终结点由来自相同或不同供应商的一个或多个驱动程序堆栈管理。 客户端可以在 ACPI 中预配置此配置,也可以直接使用 ACX 管理器的 DDI。 ACX 管理器的 DDI 在 acxmanager.h 标头中描述。

ACX 对象包

ACX 对象包用于存储各种数据类型。 ACXOBJECTBAG 可以在各种 DDI 中作为参数传递。 对象包的 DDI 在 acxmisc.h 标头中描述。

ACX 对象摘要

下表列出了所有 ACX 对象,并提供有关每个对象的一些基本信息。

句柄 名称 用途
ACXMANAGER ACX 管理器 用于管理和控制其他对象的 ACX 管理器对象。
ACXOBJECTBAG 对象包 用于存储用于对象的数据。
ACXEVENT ACX 事件 对于 KS(内核流式处理)事件。
ACXEVENTDATA 事件数据 与事件关联的数据。
ACXPNPEVENT Pnp 事件 对于即插即用事件。
ACXCIRCUIT 线路 本主题中上述的 ACX 线路。
ACXPIN 固定 ACX 引脚对象表示逻辑连接,在本主题的上述内容中有所描述。
ACXELEMENT 元素 用于表示可添加到 AcxCircuit 或 AcxStream 的任何元素,例如 AcxVolume
ACXAUDIOENGINE 音频引擎 在呈现线路中用于表示 DSP 的 ACX 音频引擎。
ACXSTREAMAUDIOENGINE 流音频引擎 在呈现流中用于表示 DSP。
ACXKEYWORDSPOTTER 关键字检测工具 在捕获线路中用于在音频流中进行关键字检测的关键字检测工具。
ACXVOLUME 体积 用于表示音量、增益、增强。
ACXMUTE 静音 用于表示静音元素。
ACXJACK Jack 用于表示音频插孔或其他物理连接器。
ACXMICARRAYGEOMETRY 麦克风阵列几何图形 用于表示麦克风阵列几何图形,例如麦克风的位置。
ACXPEAKMETER 峰值计 当硬件支持峰值计功能时使用。
ACXSTREAM Stream 用于表示线路创建的音频流,如本主题上文所述。
ACXDATAFORMAT 数据格式 数据格式表示音频设备支持的数据格式。
ACXDATAFORMATLIST 数据格式列表 可供使用的音频数据格式的列表。
ACXTARGETCIRCUIT 目标线路 用于与其他堆栈公开的远程线路通信。
ACXTARGETPIN 目标引脚 用于与其他堆栈公开的远程线路引脚通信。
ACXTARGETELEMENT Target 元素 用于表示可添加到 AcxCircuit 或 AcxStream 的目标元素,例如 AcxVolume
ACXTARGETSTREAM 目标流 用于与其他堆栈公开的远程线路流通信。
ACXTARGETFACTORYCIRCUIT 目标线路工厂 用于与远程线路工厂通信。
ACXSTREAMBRIDGE 流桥接 由线路用于传播线路段之间的流创建、状态转换和 DRM。
ACXCOMPOSITE 复合 用于表示多线路/多栈/多供应商流体系结构。
ACXCOMPOSITEFACTORY 复合工厂 创建复合音频线路的工厂。
ACXFACTORYCIRCUIT 工厂线路 使用特定模板创建线路的工厂。
ACXCIRCUITMANAGER 线路管理器 用于动态线路创建的线路提供程序。
ACXCOMPOSITETEMPLATE 复合模板 复合模板表示部分或完整的音频绑定。 复合模板可以有一个或多个线路模板。
ACXCIRCUITTEMPLATE 线路模板 线路模板表示部分音频路径。
ACXAUDIOMODULE 音频模块 对于自定义第 3 方附加功能。

以下 ACX 对象用于存储线路、流和线路工厂信息。

句柄 用途
ACXCIRCUIT_INIT 存储 ACX 线路初始化数据
ACXSTREAM_INIT 存储 ACX 流初始化数据
ACXFACTORYCIRCUIT_INIT 存储 ACX 线路工厂使用的初始化数据

另请参阅

ACX 音频类扩展概述

ACX 参考文档