ACX 개체 요약

이 항목에서는 ACX 오디오 드라이버의 기반을 형성하는 ACX(오디오 클래스 확장) 개체에 대한 개략적인 요약을 제공합니다. ACX에 대한 일반적인 개요는 ACX 오디오 클래스 확장 개요를 참조하세요.

ACX 개체는 WDF(Windows Driver Framework) 개체인 WDFOBJECT입니다. WDF에 대한 자세한 내용은 프레임워크 개체 소개를 참조하세요. WDF 개체에 대한 요약은 프레임워크 개체 요약을 참조하세요.

참고

ACX 헤더 및 라이브러리는 WDK 10.0.22621.2428(2023년 10월 24일 릴리스)에 포함되지 않지만 이전 버전과 WDK의 최신(25000 시리즈 빌드) Insider Preview에서 사용할 수 있습니다. WDK의 미리 보기 버전에 대한 자세한 내용은 WDK(Windows 드라이버 키트)의 미리 보기 버전 설치를 참조하세요.

ACX 개체 계층 구조

ACX(WDF에서와 같이)에서 드라이버 개체는 루트 개체이고 다른 모든 개체는 자식/하위 개체입니다. 모든 ACX 개체는 다른 ACX 또는 WDF 개체를 통해 직접 또는 간접적으로 드라이버 개체의 자식입니다. ACX 드라이버는 생성 시간 동안 ACX 개체의 부모를 지정할 수 있습니다. 부모가 지정되지 않은 경우 ACX는 이 섹션에 설명된 대로 기본 부모를 사용합니다.

맨 위에 WDFDEVICE가 있고 아래 회로 및 스트림과 같은 주요 ACX 개체가 있는 ACX 개체의 계층 구조를 보여 주는 다이어그램.

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 회로용 DPI는 acxcircuit.h 헤더에 설명되어 있습니다.

ACX 핀

WDM Portcls 오디오 드라이버와 마찬가지로 AcxPin 개체는 데이터 스트림이 시스템 통신 버스에서 어댑터를 입력하거나 어댑터에서 시스템 통신 버스를 입력하는 논리적 연결(실제 연결이 아님)을 나타냅니다.

핀에 대한 DDI는 acxpin.h 헤더에 설명되어 있습니다.

ACX 스트림

AcxStream은 특정 회로 하드웨어의 오디오 스트림을 나타냅니다. AcxStream은 하나 이상의 AcxElements와 유사한 개체를 집계할 수 있습니다. 기본적으로 AcxElements는 동일한 어셈블리 순서로 '연결'됩니다. AcxStream은 하나의 ACX 회로와만 연결됩니다.

  • AcxStream에는 전용 WDF 큐가 있습니다. WDF 큐에 대한 자세한 내용은 프레임워크 큐 개체를 참조하세요.
  • AcxStream은 다양한 상태를 지원합니다. 이러한 상태는 오디오가 흐르거나(실행 상태) 흐르지 않는 경우(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을 사용하여 원격 회로 팩터리 instance 통신합니다. AcxTargetFactoryCircuit은 WdfTarget을 사용하여 원격 회로 팩터리에 메시지를 보내도록 구현됩니다.

위의 각 ACX 형식은 원격 회로와 상호 작용하는 속성, 메서드 및 이벤트를 지원합니다. 이러한 모든 형식은 WdfIoTarget 개체를 기반으로 빌드됩니다.

대상에 대한 DDI는 acxtargets.h 헤더에 정의됩니다.

ACX 스트림 브리지

AcxStreamBridge 개체는 회로에서 스트림 생성, 스트림의 상태 전환 및 회로 세그먼트 간의 DRM 설정을 전파하는 데 사용됩니다. 이 개체는 다중 회로(오디오 복합) 시나리오에서만 사용됩니다. 드라이버는 하나 이상의 ACXSTREAMBRIDGE 개체를 브리지 핀에 연결할 수 있습니다. 브리지 핀은 다른 회로의 코레스포인딩 ACXPIN에 논리적으로 연결되는 ACXPIN입니다.

Stream용 DDI는 acxstreams.h 헤더에 설명되어 있습니다.

ACX 오디오 엔진 노드 회로 레이아웃의 예

다음 다이어그램은 ACX 회로를 보여 줍니다. 호스트 및 오프로드 핀은 에코 취소에 사용할 수 있는 루프백 핀이 있는 회로에 대한 입력입니다. 출력은 스피커로 라우팅되는 브리지 핀일 수 있습니다.

왼쪽에 호스트, 오프로드 및 루프백 핀이 있고 오른쪽에 브리지 핀이 있는 ACX 회로가 오디오 엔진 노드를 통해 라우팅되는 다이어그램

회로/요소가 회로에 추가된 순서와 동일한 순서로 연결되면 드라이버는 명시적으로 연결하는 단계를 수행할 필요가 없습니다.

기본적으로 ACX는 회로의 ACX 요청 싱크 핀에서 시작하여 렌더링 및 캡처 디바이스 모두에 대한 회로의 디바이스 브리지 핀으로 끝나는 요소를 연결합니다.

ACX 관리자

ACX 관리자는 복합 오디오 엔드포인트 지원과 같은 시스템 작업에 사용됩니다. 이러한 유형의 엔드포인트는 동일하거나 다른 공급업체의 하나 이상의 드라이버 스택에서 관리됩니다. 클라이언트는 ACPI에서 이 구성을 미리 구성하거나 ACX Manager의 DDI를 직접 사용할 수 있습니다. ACX 관리자의 DPI는 acxmanager.h 헤더에 설명되어 있습니다.

ACX 개체 모음

ACX 개체 모음은 다양한 데이터 형식을 저장하는 데 사용됩니다. ACXOBJECTBAG은 다양한 DDI에서 인수로 전달될 수 있습니다. 개체 모음에 대한 DDI는 acxmisc.h 헤더에 설명되어 있습니다.

ACX 개체 요약

다음 표에서는 모든 ACX 개체를 나열하고 각 개체에 대한 몇 가지 기본 정보를 제공합니다.

Handle Name 목적
ACXMANAGER ACX 관리자 다른 개체를 관리하고 제어하는 데 사용되는 ACX Manager 개체입니다.
ACXOBJECTBAG 개체 모음 개체와 함께 사용할 데이터를 저장하는 데 사용됩니다.
ACXEVENT ACX 이벤트 KS(커널 스트리밍) 이벤트의 경우.
ACXEVENTDATA 이벤트 데이터 이벤트와 연결된 데이터입니다.
ACXPNPEVENT Pnp 이벤트 플러그 앤 플레이 이벤트의 경우.
ACXCIRCUIT 회로 이 항목에서 위에서 설명한 ACX 회로입니다.
ACXPIN Pin ACX 핀 개체는 논리적 연결을 나타내며 이 항목에서 위에서 설명합니다.
ACXELEMENT 요소 AcxVolume과 같은 AcxCircuit 또는 AcxStream에 추가할 수 있는 모든 요소를 나타내는 데 사용됩니다.
ACXAUDIOENGINE 오디오 엔진 DSP를 나타내기 위해 렌더링 회로에 사용되는 ACX 오디오 엔진입니다.
ACXSTREAMAUDIOENGINE 오디오 엔진 스트리밍 렌더링 스트림에서 DSP를 나타내는 데 사용됩니다.
ACXKEYWORDSPOTTER 키 단어 스포터 오디오 스트림에서 키워드(keyword) 검색을 위해 캡처 회로에 사용되는 키워드(keyword) 스포터입니다.
ACXVOLUME 볼륨 볼륨, 게인, 부스트를 나타내는 데 사용됩니다.
ACXMUTE 음소거 음소거 요소를 나타내는 데 사용됩니다.
ACXJACK 오디오 잭 또는 기타 물리적 커넥터를 나타내는 데 사용됩니다.
ACXMICARRAYGEOMETRY 마이크 배열 기하 도형 마이크 위치와 같은 마이크 배열 기하 도형을 나타내는 데 사용됩니다.
ACXPEAKMETER 최고 측정기 하드웨어가 최대 측정기 기능을 지원할 때 사용됩니다.
ACXSTREAM STREAM 이 항목에서 위에서 설명한 회로에서 만든 오디오 스트림을 나타내는 데 사용됩니다.
ACXDATAFORMAT 데이터 형식 데이터 형식은 오디오 디바이스에서 지원하는 데이터 형식을 나타냅니다.
ACXDATAFORMATLIST 데이터 형식 목록 사용할 수 있는 오디오 데이터 형식 목록입니다.
ACXTARGETCIRCUIT 대상 회로 다른 스택에서 노출되는 원격 회로와 통신하는 데 사용됩니다.
ACXTARGETPIN 대상 핀 다른 스택에 의해 노출되는 원격 회로의 핀과 통신하는 데 사용됩니다.
ACXTARGETELEMENT Target 요소 AcxVolume과 같은 AcxCircuit 또는 AcxStream에 추가할 수 있는 대상 요소를 나타내는 데 사용됩니다.
ACXTARGETSTREAM 대상 스트림 다른 스택에 의해 노출되는 원격 회로의 스트림과 통신하는 데 사용됩니다.
ACXTARGETFACTORYCIRCUIT 대상 회로 팩터리 원격 회로의 팩터리와 통신하는 데 사용됩니다.
ACXSTREAMBRIDGE 스트림 브리지 회로에서 스트림 생성, 상태 전환 및 DRM을 회로 세그먼트 간에 전파하는 데 사용됩니다.
ACXCOMPOSITE 복합 다중 회로/다중 스택/다중 공급업체 스트림 아키텍처를 나타내는 데 사용됩니다.
ACXCOMPOSITEFACTORY 복합 팩터리 복합 오디오 회로를 만드는 팩터리입니다.
ACXFACTORYCIRCUIT 팩터리 회로 특정 템플릿을 사용하여 회로를 만드는 팩터리입니다.
ACXCIRCUITMANAGER 회로 관리자 동적 회로 생성에 사용되는 회로 공급자입니다.
ACXCOMPOSITETEMPLATE 복합 템플릿 복합 템플릿은 부분 또는 전체 오디오 바인딩을 나타냅니다. 복합 템플릿에는 하나 이상의 회로 템플릿이 있을 수 있습니다.
ACXCIRCUITTEMPLATE 회로 템플릿 회로 템플릿은 부분 오디오 경로를 나타냅니다.
ACXAUDIOMODULE 오디오 모듈 사용자 지정 타사 기능을 추가합니다.

다음 ACX 개체는 회로, 스트림 및 회로 팩터리 정보를 저장하는 데 사용됩니다.

Handle 목적
ACXCIRCUIT_INIT ACX 회로 초기화 데이터 저장
ACXSTREAM_INIT ACX 스트림 초기화 데이터 저장
ACXFACTORYCIRCUIT_INIT ACX 회로 팩터리에서 사용하는 초기화 데이터를 저장합니다.

추가 정보

ACX 오디오 클래스 확장 개요

ACX 참조 설명서