통신 디바이스 사용

Windows 7에서 Mmsys.cpl Windows 멀티미디어 제어판은 새 통신 탭을 제공합니다. 이 탭에는 사용자가 시스템이 통신 디바이스를 관리하는 방법을 정의하는 옵션을 설정할 수 있는 옵션이 포함되어 있습니다. 통신 장치는 주로 컴퓨터에서 전화를 걸거나 받는 데 사용됩니다. 렌더링 디바이스(스피커)와 캡처 디바이스(마이크)가 하나만 있는 컴퓨터의 경우 이러한 오디오 디바이스도 기본 통신 디바이스로 작동합니다. 사용자가 USB 헤드셋과 같은 새 디바이스를 연결하면 시스템은 OEM에 의해 채워진 구성 설정을 조회하여 자동 디바이스 역할 검색을 수행합니다. 시스템에서 통신 목적에 가장 적합한 디바이스를 결정하는 경우 시스템은 디바이스에 전자 통신 역할을 할당합니다. 이러한 디바이스의 경우 Windows 7 Mmsys.cpl 사용자가 오디오 렌더링(재생 탭) 및 오디오 캡처(녹음/녹화 탭)를 위해 각각 통신 장치를 선택할 수 있도록 하는 기본 통신 장치 옵션을 제공합니다. 시스템은 자동 역할 검색을 수행하지만 통신에 사용할 특정 디바이스를 설정하지는 않습니다. 이 작업은 사용자가 수행해야 합니다. 새 전자 통신 역할을 통해 애플리케이션은 사용자가 전화 통화를 처리하기 위해 선택한 디바이스와 멀티미디어 디바이스(음악 재생)로 사용할 디바이스를 구분할 수 있습니다. 예를 들어 사용자에게 헤드셋과 스피커가 컴퓨터에 연결된 경우 시스템은 eConsole 역할을 스피커에 할당하고 eCommunications 역할을 헤드셋에 할당합니다. 사용자가 통신 장치로 사용할 헤드셋을 선택하여 통신 애플리케이션을 개발한 후 오디오 스트림 렌더링을 위해 헤드셋을 대상으로 지정할 수 있습니다. 사용자가 시스템에서 할당한 디바이스 역할을 변경할 수 없는 애플리케이션입니다. 디바이스 역할에 대한 자세한 내용은 디바이스 역할을 참조하세요.

VoIP 및 통합 통신 애플리케이션과 같은 통신 애플리케이션은 컴퓨터를 통해 전화를 걸고 받습니다. 예를 들어 VoIP 애플리케이션은 오디오 스트림을 렌더링하기 위해 통신 디바이스 집합의 엔드포인트에 링인 알림이 포함된 스트림을 할당할 수 있습니다. 또한 애플리케이션은 통신 디바이스로 설정된 캡처 및 렌더링 엔드포인트 디바이스에서 음성 입력 및 출력 스트림을 열 수 있습니다.

애플리케이션에 통신 기능을 통합하려면 다음을 사용할 수 있습니다.

  • MMDevice API - 통신 디바이스의 엔드포인트에 대한 참조를 가져옵니다.
  • WASAPI - 통신 디바이스를 통해 오디오 스트림을 렌더링하고 캡처합니다. 운영 체제는 통신 디바이스에서 열린 스트림을 통신 스트림으로 간주합니다.

통신 애플리케이션은 핵심 오디오 API를 사용하여 비 통신 스트림을 관리하는 것과 동일한 방식으로 디바이스를 열거하고 통신 스트림(렌더링 또는 캡처) 스트림에 대한 스트림 관리를 제공합니다.

통신 애플리케이션에서 통합할 수 있는 기능 중 하나는 더킹 또는 스트림 감쇠입니다. 이 동작은 통신 장치에서 전화를 받을 때와 같이 통신 스트림이 열릴 때 다른 소리에 어떤 일이 일어나야 하는지 정의합니다. 시스템은 사용자의 선택에 따라 비 통신 스트림의 오디오 볼륨을 음소거하거나 낮출 수 있습니다. 오디오 시스템은 스트림을 렌더링하거나 캡처하기 위해 통신 스트림을 열거나 닫을 때 더킹 이벤트를 생성합니다. 기본적으로 운영 체제는 기본 더킹 환경을 제공합니다. 미디어 애플리케이션은 기본 동작을 대체하고 이러한 이벤트 자체를 처리하여 사용자 지정된 더킹 환경을 제공할 수 있습니다.

다음 섹션에서는 핵심 오디오 API를 사용하여 사용자 지정 더킹 환경을 제공하는 방법을 설명합니다.

통신 디바이스 엔드포인트에 대한 참조 가져오기

통신 디바이스를 사용하려면 직접 WASAPI 클라이언트가 디바이스 열거자를 사용하여 디바이스를 열거해야 합니다. IMMDeviceEnumerator::GetDefaultAudioEndpoint를 호출하여 기본 통신 디바이스의 엔드포인트에 대한 참조를 가져옵니다. 이 호출에서 애플리케이션은 디바이스 열거를 통신 디바이스로 제한하기 위해 Role 매개 변수에서 eCommunications을 지정해야 합니다. 디바이스에 대한 디바이스 엔드포인트에 대한 참조를 받은 후 IMMDevice::Activate를 호출하여 엔드포인트 범위가 지정된 서비스를 활성화할 수 있습니다. 예를 들어 IID_IAudioClient 서비스 식별자를 전달하여 오디오 클라이언트 개체를 활성화하고 스트림 관리, 통신 디바이스 엔드포인트의 볼륨 컨트롤에 액세스할 수 있는 IID_IAudioEndpointVolume 식별자 또는 엔드포인트의 정책 엔진과 상호 작용할 수 있는 세션 관리자를 활성화하는 IID_IAudioSessionManager 식별자를 사용할 수 있습니다. 스트림 작업에 대한 자세한 내용은 스트림 관리를 참조하세요.

IMMDevice 참조를 사용하여 디바이스 엔드포인트에 대한 속성 저장소에 액세스할 수도 있습니다. 디바이스 식별 이름 및 제조업체 이름과 같은 이러한 속성 값은 OEM에 의해 채워지고 애플리케이션이 통신 디바이스의 특성을 확인할 수 있도록 합니다. 자세한 내용은 디바이스 속성을 참조하세요.

다음 예제 코드는 오디오 스트림을 렌더링하기 위한 기본 통신 디바이스의 엔드포인트에 대한 참조를 가져옵니다.

IMMDevice *defaultDevice = NULL;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
            CLSCTX_INPROC_SERVER, 
            __uuidof(IMMDeviceEnumerator), 
            (LPVOID *)&deviceEnumerator);

hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, 
            eCommunications, &defaultDevice);

스트림 관리