RenderSharedEventDriven

이 샘플 애플리케이션은 핵심 오디오 API를 사용하여 사용자가 지정한 출력 디바이스에 오디오 데이터를 렌더링합니다. 이 샘플에서는 공유 모드의 렌더링 클라이언트에 대한 이벤트 기반 버퍼링을 보여 줍니다. 공유 모드 스트림의 경우 클라이언트는 엔드포인트 버퍼를 오디오 엔진과 공유합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

설명

이 샘플에서는 다음 기능을 보여 줍니다.

  • 멀티미디어 디바이스 열거 및 선택을 위한 MMDevice API입니다.
  • 스트림 관리 작업을 위한 WASAPI입니다.

요구 사항

제품 버전
Windows SDK Windows 7
Visual Studio 2008

 

샘플 다운로드

이 샘플은 다음 위치에서 사용할 수 있습니다.

위치 Path/URL
Windows SDK \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderSharedEventDriven\...

 

예제 빌드

RenderSharedEventDriven 샘플을 빌드하려면 다음 단계를 사용합니다.

  1. Windows SDK용 CMD 셸을 열고 RenderSharedEventDriven 샘플 디렉터리로 변경합니다.
  2. RenderSharedEventDriven 디렉터리에서 명령을 start WASAPIRenderSharedEventDriven.sln 실행하여 Visual Studio 창에서 WASAPIRenderSharedEventDriven 프로젝트를 엽니다.
  3. 창 내에서 디버그 또는 릴리스 솔루션 구성을 선택하고 메뉴 모음에서 빌드 메뉴를 선택한 다음 빌드 옵션을 선택합니다. SDK용 CMD 셸에서 Visual Studio를 열지 않으면 Visual Studio에서 SDK 빌드 환경에 액세스할 수 없습니다. 이 경우 프로젝트 파일 WASAPIRenderSharedEventDriven.vcproj에서 사용되는 환경 변수 MSSdk를 명시적으로 설정하지 않으면 샘플이 빌드되지 않습니다.

샘플 실행

데모 애플리케이션을 성공적으로 빌드하면 실행 파일 WASAPIRenderSharedEventDriven.exe 생성됩니다. 실행하려면 명령 창에 필수 또는 선택적 인수를 입력 WASAPIRenderSharedEventDriven 합니다. 다음 예제에서는 기본 멀티미디어 디바이스에서 재생 기간을 지정하여 샘플을 실행하는 방법을 보여줍니다.

WASAPIRenderSharedEventDriven.exe -d 20 -multimedia

다음 표에서는 인수를 보여줍니다.

인수 Description
-? 도움말을 표시합니다.
-H 도움말을 표시합니다.
-f Hz의 사인파 주파수입니다.
-l 오디오 렌더링 대기 시간(밀리초)입니다.
-d 사인 파동 지속 시간(초)입니다.
-M MMCSS 사용을 사용하지 않도록 설정합니다.
-콘솔 기본 콘솔 디바이스를 사용합니다.
-통신 기본 통신 디바이스를 사용합니다.
-멀티미디어 기본 멀티미디어 디바이스를 사용합니다.
-끝점 스위치 값에 지정된 엔드포인트 식별자를 사용합니다.

 

애플리케이션이 인수 없이 실행되는 경우 사용 가능한 디바이스를 열거하고 사용자에게 렌더링 세션에 대한 디바이스를 선택하라는 메시지를 표시합니다. 사용자가 디바이스를 지정한 후 애플리케이션은 10초 동안 440Hz에서 사인파를 렌더링합니다. 이러한 값은 -f 및 -d 스위치 값을 지정하여 수정할 수 있습니다.

RenderSharedEventDriven은 이벤트 기반 버퍼링을 보여 줍니다. 샘플에서는 다음을 수행합니다.

  • 오디오 클라이언트를 인스턴스화하고, 단독 모드에서 실행되도록 구성하고, IAudioClient::Initialize 호출에서 AUDCLNT_STREAMFLAGS_EVENTCALLBACK 플래그를 설정하여 이벤트 기반 버퍼링을 사용하도록 설정합니다.
  • IAudioClient::SetEventHandle 메서드를 호출하여 시스템에 이벤트 핸들을 제공하여 렌더링할 준비가 된 샘플과 클라이언트를 연결합니다.
  • 오디오 엔진에서 샘플을 처리할 렌더링 스레드를 만듭니다.
  • 디바이스 엔드포인트의 혼합 형식을 확인하여 샘플을 렌더링할 수 있는지 여부를 확인합니다. 디바이스가 혼합 형식을 지원하지 않으면 데이터가 PCM으로 변환됩니다.
  • 스트림 전환을 처리합니다.

렌더링 세션이 시작되고 스트림이 시작된 후 오디오 엔진은 제공된 이벤트 핸들에 클라이언트가 처리할 준비가 될 때마다 클라이언트에 알리도록 신호를 보냅니다. 오디오 데이터는 타이머 기반 루프에서 처리할 수도 있습니다. 이 모드는 RenderSharedTimerDriven 샘플에서 설명합니다.

스트림 렌더링에 대한 자세한 내용은 스트림 렌더링을 참조하세요.

핵심 오디오 API를 사용하는 SDK 샘플