토폴로지 지정
하드웨어 공급업체가 웨이브 및 MIDI 디바이스에 쓸 미니포트 드라이버를 결정한 후 다음 단계는 이러한 디바이스의 KS(커널 스트리밍) 토폴로지를 나타내는 것입니다. KS 토폴로지 는 오디오 또는 MIDI 스트림이 각 디바이스를 통과할 때 따르는 데이터 경로를 설명하는 데이터 구조 집합으로 구성됩니다. 이 토폴로지를 통해 드라이버는 각 경로를 따라 있는 컨트롤 노드(예: 볼륨 제어)를 노출합니다. 일반적으로 애플리케이션은 Windows 멀티미디어 믹서Xxx 함수를 사용하여 각 경로를 따라 노드 시퀀스를 열거하여 토폴로지를 탐색합니다. 예를 들어 볼륨 수준 제어 노드를 검색한 후 애플리케이션은 해당 노드에서 볼륨 수준을 설정할 수 있습니다. Windows 멀티미디어에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요. 믹서Xxx 함수의 KS 토폴로지 표현에 대한 자세한 내용은 커널 스트리밍 토폴로지를 오디오 믹서 API 번역으로 참조하세요.
PortCls는 WavePci, WaveCyclic, WaveRT, MIDI, DMus 및 토폴로지의 6개 포트 드라이버를 제공합니다. (WaveRT는 Windows Vista부터 사용할 수 있으며 권장되는 방법입니다.) 토폴로지 포트 드라이버는 웨이브 및 MIDI 디바이스의 렌더링 스트림을 함께 혼합하는 오디오 어댑터 회로의 부분을 제어합니다. 또한 입력 잭에서 캡처 스트림의 선택을 제어합니다. 다소 오해의 소지가 있는 이름에도 불구하고 토폴로지 포트 드라이버는 오디오 어댑터의 토폴로지를 모두 구현하지는 않지만 일반적으로 많은 부분을 포함합니다. 다른 포트 드라이버는 어댑터 토폴로지의 나머지 부분을 기여합니다.
각 포트 드라이버는 해당 미니포트 드라이버와 페어링되어 다음 표와 같이 오디오 어댑터의 특정 디바이스(웨이브, MIDI 또는 믹서)를 나타내는 KS 필터 를 형성합니다.
필터 형식 | Description |
---|---|
웨이브Xxx 필터 |
웨이브 출력 스트림을 아날로그 오디오 신호로 변환하거나 아날로그 오디오 신호를 웨이브 입력 스트림으로 변환하는 웨이브 디바이스를 나타냅니다. |
MIDI 또는 DMus 필터 |
MIDI 스트림을 재생하거나 캡처하는 MIDI 디바이스를 나타냅니다. |
토폴로지 필터 |
어댑터의 믹서 회로를 나타냅니다. |
미니포트 드라이버는 디바이스가 포괄하는 어댑터 토폴로지 부분의 정의를 포함하여 필터의 디바이스별 함수를 구현합니다. 포트 드라이버는 각 유형의 필터에 대해 운영 체제와의 통신을 포함하여 일반 필터 작업을 처리합니다.
각 필터에는 오디오 데이터 스트림이 필터를 입력하고 나가기 위한 경로 역할을 하는 하나 이상의 KS 핀 이 있습니다. 일반적으로 토폴로지 필터의 핀은 어댑터 회로의 하드 와이어 연결을 통해 웨이브, MIDI 및 DMus 필터의 핀에 연결됩니다. 이러한 필터와 이들의 상호 연결은 어댑터의 토폴로지를 구현하는 KS 필터 그래프를 형성합니다.
다음 그림에서는 예제 오디오 어댑터의 토폴로지를 보여줍니다.
앞의 그림에서 최상위 수준의 토폴로지 는 MIDI, WaveXxx 및 토폴로지 필터 간의 연결로 구성됩니다. 또한 각 필터에는 필터를 통한 데이터 경로와 각 경로를 따라 있는 컨트롤 노드로 구성된 자체 내부 토폴로지가 있습니다. 노드는 다음 표와 같이 레이블이 지정됩니다.
레이블 | Description | KS Node-Type GUID |
---|---|---|
Synth |
신시사이저 노드 |
KSNODETYPE_SYNTHESIZER |
DAC |
디지털-오디오 변환기 노드 |
KSNODETYPE_DAC |
ADC |
아날로그-디지털 변환기 노드 |
KSNODETYPE_ADC |
볼륨 |
볼륨 수준 제어 노드 |
KSNODETYPE_VOLUME |
음소거 |
제어 노드 음소거 |
KSNODETYPE_MUTE |
합계 |
합계 노드 |
KSNODETYPE_SUM |
멀티플렉서 |
멀티플렉서 노드 |
KSNODETYPE_MUX |
위의 그림에서 오디오 어댑터의 왼쪽에 있는 핀은 데이터 스트림이 시스템 버스에서 어댑터로 들어가거나 어댑터에서 시스템 버스를 입력하는 논리적 연결(실제 연결이 아님)을 나타냅니다. 이러한 핀은 어댑터 외부에 있는 다른 필터(표시되지 않음)의 원본 및 싱크 핀에 논리적으로 연결됩니다. 일반적으로 이러한 필터는 어댑터 토폴로지와 함께 믹서Xxx 함수를 사용하여 애플리케이션에서 토폴로지를 탐색할 수 있는 더 큰 필터 그래프를 형성하는 소프트웨어 모듈입니다. 예를 들어 이전 그림에서 "PCM 웨이브 아웃"이라는 레이블이 지정된 핀은 Windows의 사용자 모드 오디오 엔진에 논리적으로 연결됩니다. 이러한 논리적 연결은 시스템 버스를 통해 DMA 전송을 통해 유지 관리됩니다.
반면 토폴로지 필터의 왼쪽 가장자리에 있는 핀은 MIDI 및 WaveXxx 필터의 핀에 물리적으로 연결됩니다. 이러한 연결은 하드 연결되며 소프트웨어에서 변경할 수 없습니다.
오디오 어댑터의 오른쪽에 있는 브리지 핀은 시스템 섀시의 오디오 잭을 나타냅니다. 이러한 핀은 KS 필터 그래프와 외부 세계 사이의 경계를 연결하기 때문에 브리지 핀 이라고 합니다.
필터, 핀 및 노드에는 일반적으로 오디오 드라이버의 클라이언트(커널 모드 구성 요소 또는 사용자 모드 애플리케이션)가 액세스할 수 있는 속성이 있습니다. 클라이언트는 필터, 핀 또는 노드에 KS 속성 요청을 보내 속성의 현재 값을 쿼리하거나 속성 값을 변경할 수 있습니다. 예를 들어 볼륨 수준 제어 노드에는 클라이언트가 KS 속성 요청을 통해 변경할 수 있는 KSPROPERTY_AUDIO_VOLUMELEVEL 속성이 있습니다. 합계 노드는 일반적으로 속성이 없는 노드 유형의 예입니다.
간단히 하기 위해 앞 그림의 WaveXxx 필터는 시스템 버스에서 PCM 웨이브 출력 스트림을 수락하기 위한 단일 핀만 제공합니다. 반면, 일부 웨이브 디바이스는 PCM 웨이브 출력을 위해 여러 핀을 제공하고 핀에 들어가는 스트림을 내부적으로 혼합하기 위한 하드웨어를 포함합니다. 이러한 디바이스는 애플리케이션의 사운드 버퍼에서 재생되는 PCM 스트림을 수락하여 DirectSound를 사용하는 애플리케이션에 대한 하드웨어 가속을 제공합니다. DirectSound가 이러한 핀을 사용하려면 WDM 오디오의 DirectSound 하드웨어 가속에 설명된 대로 2차원(2차원) 및 3차원(3차원) 처리를 위한 추가 노드를 제공해야 합니다.
이러한 유형의 하드웨어 가속은 Windows Server 2003, Windows XP, Windows 2000 및 Windows Me/98에서 지원되지만 Windows Vista에서는 지원되지 않습니다. Windows Vista는 이전 웨이브 디바이스에서 하드웨어 가속 핀을 사용하지 않습니다.
앞의 그림에서 MIDI, WaveXxx 및 토폴로지 간의 물리적 연결은 모든 전송 아날로그 오디오 신호를 필터링합니다. 그러나 다른 토폴로지 디바이스는 MIDI 및 웨이브 디바이스의 디지털 출력 스트림을 수락하고 디지털 혼합을 아날로그 출력 신호로 변환하여 비슷한 효과를 얻을 수 있습니다.
이전 그림의 왼쪽 아래 모서리에 있는 "비 PCM 웨이브 아웃" 핀은 AC-3 over-S/PDIF 또는 WMA Pro-over-S/PDIF와 같은 S/PDIF 통과 형식의 비 PCM 출력 스트림을 허용합니다. 디바이스는 이러한 형식 중 하나를 사용하여 데이터를 디코딩하지 않고 S/PDIF 링크를 통해 압축된 데이터를 전송합니다. 따라서 이전 그림의 오른쪽 아래 모서리에 있는 "S/PDIF Out" 핀의 데이터 경로에는 볼륨 또는 음소거 노드가 없습니다. 비 PCM 오디오 형식 및 S/PDIF 통과 전송에 대한 자세한 내용은 비 PCM 웨이브 형식 및 비 PCM 스트림의 S/PDIF Pass-Through 전송 지원을 참조하세요.
미니포트 드라이버는 PCFILTER_DESCRIPTOR 구조의 형태로 포트 드라이버에 토폴로지를 제공합니다. 이 구조는 필터의 모든 핀과 노드를 설명하고 핀과 노드가 서로 연결하는 방법을 지정합니다.
이전 그림과 같이 모놀리식 토폴로지 필터를 디자인하는 대신 오디오 어댑터의 믹서 회로를 여러 토폴로지 필터로 분할할 수 있습니다. 예를 들어 앞의 그림에서 스피커를 구동하는 데이터 경로는 하나의 토폴로지 필터로 구현될 수 있으며 입력 디바이스에서 오디오 데이터를 캡처하는 데이터 경로를 별도의 토폴로지 필터로 구현할 수 있습니다. 특정 토폴로지 필터의 데이터 경로가 사용되지 않는 경우 어댑터의 해당 부분은 전체 어댑터를 사용하지 않도록 설정하지 않고 전원을 끊을 수 있습니다. 자세한 내용은 동적 오디오 하위 서비스를 참조하세요.