오디오용 유니버설 Windows 드라이버

Windows 10에서는 다양한 유형의 하드웨어에서 작동하는 유니버설 오디오 드라이버를 작성할 수 있습니다. 이 항목에서는 이 방법의 이점과 플랫폼 간의 차이점에 대해 설명합니다. Windows는 오디오용 유니버설 Windows 드라이버 외에도 WDM과 같은 이전 오디오 드라이버 기술을 계속 지원합니다.

오디오용 유니버설 Windows 드라이버 시작

IHV는 모든 장치(데스크톱, 노트북, 태블릿, 휴대폰)에서 작동하는 유니버설 Windows 드라이버를 개발할 수 있습니다. 이렇게 하면 초기 개발 및 이후 코드 유지 관리에 대한 개발 시간과 비용을 줄일 수 있습니다.

유니버설 Windows 드라이버를 개발하는 데 사용할 수 있는 도구는 다음과 같습니다.

  • Visual Studio 2015: "대상 플랫폼"을 "유니버설"으로 설정합니다. 드라이버 개발 환경을 설정하는 방법에 대한 자세한 내용은 Windows 하드웨어 개발자 설명서WDK를 사용하여 드라이버 빌드를 참조하세요.

  • APIValidator 도구: ApiValidator.exe 도구를 사용하여 드라이버가 호출하는 API가 유니버설 Windows 드라이버에 유효한지 확인할 수 있습니다. 이 도구는 Windows 10용 WDK(Windows 드라이버 키트)의 일부이며 Visual Studio 2015를 사용하는 경우 자동으로 실행됩니다. 자세한 내용은 APIValidator를 참조 하세요.

  • DDI 참조 설명서: DDI 참조 설명서는 유니버설 Windows 드라이버에서 지원되는 DDI를 나타내도록 업데이트됩니다. 자세한 내용은 오디오 디바이스 참조를 참조하세요.

유니버설 오디오 드라이버 만들기

단계별 지침은 Windows 하드웨어 개발자 설명서WDK를 사용하여 드라이버 빌드를 참조하세요. 다음은 단계에 대한 요약입니다.

  1. 유니버설 오디오 드라이버의 시작점으로 사용할 유니버설 오디오 sysvad 샘플을 로드합니다. 또는 빈 WDM 드라이버 템플릿으로 시작하고 오디오 드라이버에 필요한 경우 유니버설 sysvad 샘플의 코드를 추가합니다.

  2. 프로젝트 속성에서 대상 플랫폼을 "유니버설"로 설정합니다.

  3. 설치 패키지 만들기: 대상이 데스크톱용 Windows 10(Home, Pro, Enterprise 및 Education)을 실행하는 디바이스인 경우 유니버설 INF 파일을 사용합니다. 대상이 Windows 10 Mobile을 실행하는 디바이스인 경우 PkgGen을 사용하여 .spkg 파일을 생성합니다.

  4. 데스크톱 버전 또는 Windows 10 Mobile용 Windows 10용 드라이버를 빌드, 설치, 배포 및 디버그합니다.

예제 코드

Sysvad 및 SwapAPO가 유니버설 Windows 드라이버 샘플로 변환되었습니다. 자세한 내용은 샘플 오디오 드라이버를 참조 하세요.

오디오용 유니버설 Windows 드라이버에 사용 가능한 프로그래밍 인터페이스

Windows 10부터 드라이버 프로그래밍 인터페이스는 OneCoreUAP 기반 Windows 버전의 일부입니다. 해당 공통 집합을 사용하여 유니버설 Windows 드라이버를 작성할 수 있습니다. 이러한 드라이버는 데스크톱 버전용 Windows 10과 Windows 10 Mobile 및 기타 Windows 10 버전 모두에서 실행됩니다.

유니버설 오디오 드라이버로 작업할 때 사용할 수 있는 DPI는 다음과 같습니다.

기존 오디오 드라이버를 유니버설 Windows 드라이버로 변환

이 프로세스에 따라 기존 오디오 드라이버를 유니버설 Windows 드라이버로 변환합니다.

  1. 기존 드라이버 호출이 OneCoreUAP Windows에서 실행될지 여부를 확인합니다. 참조 페이지의 요구 사항 섹션을 확인합니다. 자세한 내용은 오디오 디바이스 참조를 참조하세요.

  2. 드라이버를 유니버설 Windows 드라이버로 다시 컴파일합니다. 프로젝트 속성에서 대상 플랫폼을 "유니버설"로 설정합니다.

  3. ApiValidator.exe 도구를 사용하여 드라이버가 호출하는 DPI가 유니버설 Windows 드라이버에 대해 유효한지 확인합니다. 이 도구는 Windows 10용 WDK(Windows 드라이버 키트)의 일부이며 Visual Studio 2015를 사용하는 경우 자동으로 실행됩니다. 자세한 내용은 APIValidator를 참조 하세요.

  4. 드라이버가 OneCoreUAP에 속하지 않은 인터페이스를 호출하면 컴파일러에서 오류를 보고합니다.

  5. 이러한 호출을 대체 호출로 바꾸거나 코드 해결 방법을 만들거나 새 드라이버를 작성합니다.

구성 요소화된 오디오 드라이버 설치 만들기

개요

보다 원활하고 안정적인 설치 환경을 만들고 구성 요소 서비스를 더 잘 지원하려면 드라이버 설치 프로세스를 다음 구성 요소로 나눕니다.

  • DSP(있는 경우) 및 코덱
  • APO
  • OEM 사용자 지정

필요에 따라 DSP 및 코덱에 별도의 INF 파일을 사용할 수 있습니다.

이 다이어그램에는 구성 요소화된 오디오 설치가 요약되어 있습니다.

DSP 드라이버, 코덱 및 API를 사용하는 구성 요소화된 오디오 스택의 다이어그램

별도의 확장 INF 파일은 특정 시스템에 대한 각 기본 드라이버 구성 요소를 사용자 지정하는 데 사용됩니다. 사용자 지정에는 튜닝 매개 변수 및 기타 시스템별 설정이 포함됩니다. 자세한 내용은 확장 INF 파일 사용을 참조 하세요.

확장 INF 파일은 범용 INF 파일이어야 합니다. 자세한 내용은 유니버설 INF 파일 사용을 참조 하세요.

INF 파일을 사용하여 소프트웨어를 추가하는 방법에 대한 자세한 내용은 구성 요소 INF 파일 및 DCH 디자인 원칙 및 모범 사례 사용을 참조하세요.

구성 요소화된 INF 파일 제출

APO INF 패키지는 기본 드라이버 패키지와 별도로 파트너 센터에 제출해야 합니다. 패키지를 만드는 방법에 대한 자세한 내용은 Windows HLK 시작을 참조하세요.

SYSVAD 구성 요소화된 INF 파일

구성 요소화된 INF 파일의 예를 보려면 GitHub에서 sysvad/TabletAudioSample을 검사합니다.

File name 설명
ComponentizedAudioSample.inf 기본 구성 요소화된 샘플 오디오 INF 파일입니다.
ComponentizedAudioSampleExtension.inf 추가 OEM 사용자 지정이 있는 sysvad 기반의 확장 드라이버입니다.
ComponentizedApoSample.inf APO 샘플 확장 프로그램 INF 파일입니다.

기존 INF 파일은 SYSVAD 샘플에서 계속 사용할 수 있습니다.

File name 설명
tabletaudiosample.inf 드라이버를 설치하는 데 필요한 모든 정보를 포함하는 데스크톱 모놀리식 INF 파일입니다.

APO 공급업체별 튜닝 매개 변수 및 기능 구성

모든 APO 공급업체 시스템별 설정, 매개 변수 및 튜닝 값은 확장 INF 패키지를 통해 설치해야 합니다. 대부분의 경우 INF AddReg 지시문을 사용하여 간단한 방식으로 수행할 수 있습니다. 더 복잡한 경우 튜닝 파일을 사용할 수 있습니다. 

기본 드라이버 패키지는 작동하기 위해 이러한 사용자 지정에 의존해서는 안 됩니다(물론 기능이 감소될 수 있음). 

UWP 오디오 설정 APP

최종 사용자 UI를 구현하려면 Windows 유니버설 오디오 드라이버에 HSA(하드웨어 지원 앱)를 사용합니다. 자세한 내용은 HSA(하드웨어 지원 앱): 드라이버 개발자를 위한 단계를 참조 하세요.

프로그래밍 방식으로 UWP 하드웨어 지원 앱 시작

드라이버 이벤트(예: 새 오디오 디바이스가 연결된 경우)에 따라 UWP 하드웨어 지원 앱을 프로그래밍 방식으로 시작하려면 Windows 셸 API를 사용합니다. Windows 10 Shell API는 리소스 활성화에 따라 또는 IApplicationActivationManager를 통해 직접 UWP UI를 시작하는 방법을 지원합니다. Windows 10 UWP 앱을 시작하는 자동화에서 UWP 애플리케이션의 자동 시작에 대한 자세한 내용을 확인할 수 있습니다

AudioModules API의 APO 및 디바이스 드라이버 공급업체 사용

오디오 모듈 API/DDI는 UWP 애플리케이션 또는 사용자 모드 서비스 간에 커널 드라이버 모듈 또는 DSP 처리 블록으로 전달되는 명령에 대한 통신 전송(프로토콜 아님)을 표준화하도록 설계되었습니다. 오디오 모듈을 사용하려면 모듈 열거 및 통신을 지원하기 위해 올바른 DDI를 구현하는 드라이버가 필요합니다. 명령은 이진으로 전달되고 해석/정의는 작성자에 맡깁니다. 

오디오 모듈은 현재 오디오 엔진에서 실행되는 UWP 앱과 SW APO 간의 직접 통신을 용이하게 하도록 설계되지 않았습니다.

오디오 모듈에 대한 자세한 내용은 오디오 모듈 통신 구현 및 오디오 디바이스 모듈 구성 및 쿼리를 참조하세요.

APO HWID 문자열 생성

APO 하드웨어 ID는 표준 정보와 공급업체 정의 문자열을 모두 통합합니다.

다음과 같이 생성됩니다.

SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4) &REV_r(4)
SWC\VEN_v(4)&AID_a(4)&SUBSYS_ n(4)s(4)
SWC\VEN_v(4)&AID_a(4)

여기서

  • v(4)는 APO 디바이스 공급업체의 4자 식별자입니다. Microsoft에서 관리합니다. 
  • a(4)는 APO 공급업체에서 정의한 APO의 4자 식별자입니다. 
  • n(4)은 부모 디바이스에 대한 하위 시스템의 공급업체에 대한 4자 PCI SIG 할당 식별자입니다. 일반적으로 OEM 식별자입니다.
  • s(4)는 부모 디바이스에 대한 4자 공급업체 정의 하위 시스템 식별자입니다. 일반적으로 OEM 제품 식별자입니다.

드라이버 업데이트에 대한 INF 버전 및 날짜 평가 플러그 앤 플레이

Windows 플러그 앤 플레이 시스템은 날짜 및 드라이버 버전을 평가하여 여러 드라이버가 있을 때 설치할 드라이브를 결정합니다. 자세한 내용은 Windows에서 드라이버 순위를 지정하는 방법을 참조 하세요.

최신 드라이버를 사용할 수 있도록 하려면 각 새 버전의 드라이버에 대해 날짜 및 버전을 반드시 업데이트해야 합니다.

APO 드라이버 레지스트리 키

타사 정의 오디오 드라이버/APO 레지스트리 키의 경우 HKR을 사용합니다.

Windows 서비스를 사용하여 UWP <-> APO 통신 촉진

Windows 서비스는 API와 같은 사용자 모드 구성 요소를 관리하는 데 반드시 필요한 것은 아닙니다. 그러나 디자인에 UWP <-> APO 통신을 용이하게 하는 RPC 서버가 포함된 경우 Windows 서비스에서 해당 기능을 구현한 다음 오디오 엔진에서 실행되는 APO를 제어하는 것이 좋습니다. 

Windows 10 Desktop용 Sysvad 유니버설 오디오 샘플 빌드

다음 단계를 완료하여 Windows 10 데스크톱용 sysvad 샘플을 빌드합니다.

  1. 데스크톱 inf 파일(tabletaudiosample.inf)을 찾아 제조업체 이름을 "Contoso"와 같은 값으로 설정합니다.

  2. 솔루션 탐색기 솔루션 'sysvad'를 선택하고 길게 누르거나 마우스 오른쪽 단추로 클릭하고 Configuration Manager를 선택합니다. 64비트 버전의 Windows에 배포하는 경우 대상 플랫폼을 x64로 설정합니다. 모든 프로젝트에 대해 구성 및 플랫폼 설정이 동일한지 확인합니다.

  3. sysvad 솔루션에서 모든 프로젝트를 빌드합니다.

  4. 빌드에서 빌드의 출력 디렉터리를 찾습니다. 예를 들어 다음과 같은 디렉터리에 있을 수 있습니다.

    C:\Program Files (x86)\Windows Kits\10\src\audio\sysvad\x64\Debug\package
    
  5. sysvad 드라이버를 설치하려는 시스템에 다음 파일을 복사합니다.

파일 설명
TabletAudioSample.sys 드라이버 파일입니다.
tabletaudiosample.inf 드라이버를 설치하는 데 필요한 정보가 포함된 정보(INF) 파일입니다.
sysvad.cat 카탈로그 파일입니다.
SwapAPO.dll API를 관리하는 UI에 대한 샘플 드라이버 확장입니다.
KeywordDetectorAdapter.dll 샘플 키워드 감지기입니다.

드라이버 설치 및 테스트

다음 단계에 따라 대상 시스템에 PnpUtil사용하여 드라이버를 설치합니다.

  1. 관리자 명령 프롬프트를 열고 드라이버 파일을 복사한 디렉터리에 다음을 입력합니다.

    pnputil -i -a tabletaudiosample.inf

  2. sysvad 드라이버 설치가 완료되어야 합니다. 오류가 있는 경우 이 파일을 검사하여 추가 정보를 확인할 수 있습니다. %windir%\inf\setupapi.dev.log

  3. 장치 관리자 보기 메뉴에서 유형별로 디바이스를 선택합니다. 디바이스 트리에서 Microsoft WDM(Virtual Audio Device) - Sysvad 샘플을 찾습니다. 일반적으로 소리, 비디오 및 게임 컨트롤러 노드 아래에 있습니다.

  4. 대상 컴퓨터에서 제어판 열고 하드웨어 및 소리>관리 오디오 장치이동합니다. 소리 대화 상자에서 Microsoft WDM(가상 오디오 장치) - Sysvad 샘플로 레이블이 지정된 스피커 아이콘을 선택한 다음, 기본값 설정을 선택하지만 확인을 선택하지 않습니다. 그러면 소리 대화 상자가 열린 상태로 유지됩니다.

  5. 대상 컴퓨터에서 MP3 또는 기타 오디오 파일을 찾아 두 번 클릭하여 재생합니다. 그런 다음 소리 대화 상자에서 Microsoft WDM(Virtual Audio Device) - Sysvad 샘플 드라이버와 연결된 볼륨 수준 표시기에서 작업이 있는지 확인합니다.