DirectPlay DirectPlay Voice 음성 캡춰 장치의 공유   [목차열람] [주소복사] [슬롯비우기]
음성 캡춰 장치의 공유
 
Microsoft DirectX 9.0

음성 캡춰 장치의 공유


최신 버전의 Microsoft® Windows®, Windows Millennium Edition (Windows Me), Windows XP 에서는, 다른 프로세스간에 음성 캡춰 장치를 공유할 수 있다. 그러나, Windows 95, Windows 98, Windows 2000 operating system에서는, 음성 캡춰 장치는공유 리소스이며, 1 개의 프로세스만이 열릴 수가 있다. 이러한 operating system로 음성 캡춰를 사용하려면 , 리소스의 소유권과 정합성의 문제를 효과적으로 처리하도록(듯이) 애플리케이션이 설계되고 있을 필요가 있다. 여기에서는, 임의의 Windows operating system로, 복수의 Microsoft DirectPlay® Voice 애플리케이션이 같은 음성 캡춰 장치를 공유하는 방법에 대해 설명한다.

공유 리소스의 조정

음성 캡춰 장치등의 물리 리소스가 공유 리소스인 경우, 리소스의 소유권이 문제가 된다. 1 개의 애플리케이션이 공유 음성 캡춰 장치를 소유하고 있는 경우, 다른 애플리케이션은 그 장치를 열 수가 없다. 지금까지, 음성 캡춰를 사용하는 애플리케이션은 거의 없었기 (위해)때문에, 이 제약에 의한 문제는 보기 드물었다. 그러나, 음성인식등의 테크놀러지가 보급하는 것에 따라, 애플리케이션은 음성 캡춰 장치의 배타적 소유권을 가지는 것을 전제로 할 수 없게 되었다. 예를 들어, 로비 오퍼레이터는, 클라이언트가 게임 세션을 설정하기 위한 음성 채팅 기능을 처리 하는 일이 있다. 그러나, 로비 클라이언트 애플리케이션이 음성 캡춰 장치를 소유하고 있는 경우, 게임 애플리케이션은 음성 캡춰를 사용하지 못하고, 음성 기능은 실질적으로 무효가 된다.

리소스의 정합성은, 복수의 애플리케이션이 공유 리소스의 소유권을 관리하는 프로세스이다. 예를 들어, 2 개의 음성 통신 애플리케이션이 실행되고 있는 경우, 보통, foreground의 애플리케이션만이 음성 캡춰 장치를 필요로 한다. 포커스가 변경되었을 경우, 음성 캡춰 장치의 소유권은, 새로운 foreground 애플리케이션으로 처리할 필요가 있다. 예를 들어, player의 그룹이 로비의 음성 채팅 기능을 사용해 세션의 설정을 종료했을 경우, 계속되어 게임 애플리케이션을 기동한다. 이 시점에서, 게임 애플리케이션은 foreground로 이동해, 게임 관련의 음성 기능에 필요한 음성 캡춰 장치의 소유권을 얻어온다.

DirectPlay Voice 는,캡춰 포커스로 불리는 기능에 의해, 음성 캡춰 장치의 공유의 문제를 처리한다. 캡춰 포커스는 장치 단위로 동작해, 시스템에 인스톨 되고 있는 Windows 의 반 존에 관계없이, 복수의 DirectPlay Voice 애플리케이션이 1 개의 음성 캡춰 장치를 공유할 수 있도록(듯이) 한다. 캡춰 포커스가 유효하게 되어 있는 한, 임의의 수의 DirectPlay Voice 애플리케이션 인스턴스가, 같은 음성 캡춰 장치를 열 수가 있다. 캡춰 포커스에 의해, DirectPlay Voice 애플리케이션은, 음성 캡춰 장치의 사용의 정합성을 취할 수가 있다. DirectPlay Voice 를 사용하지 않는 애플리케이션은, 캡춰 포커스를 이용할 수 없다.

포커스 캡춰의 사용

DirectPlay Voice 는, 캡춰 포커스를 유효하게 하고 있는 모든 DirectPlay Voice 애플리케이션에 대해서, 자동적으로 음성 캡춰 장치의 사용의 정합성을 취한다. 캡춰 포커스를 유효하게 한 복수의 DirectPlay Voice 애플리케이션이 실행되고 있는 경우, 보통, 포커스의 정합성은 다음과 같이 놓친다.

보통, 캡춰 포커스의 처리은, 윈도우 포커스의 처리 후에 실행된다. 일반적으로, 윈도우가 foreground가 되고 나서 1 ~ 2 초 후에, 애플리케이션이 캡춰 포커스를 얻어온다.

캡춰 포커스는 디폴트로 유효하게 된다. 캡춰 포커스를 무효로 하려면 ,? yIDirectPlayVoiceClient::Connect 를 호출해 음성 세션에 접속할 경우에,DVSOUNDDEVICECONFIG 구조체의 dwFlags 멤버에 DVSOUNDCONFIG_NOFOCUS 플래그를 설정할 필요가 있다.

   DVSOUNDCONFIG_NOFOCUS 플래그의 사용은 추천 하지 않는다. 이 플래그를 설정해, 애플리케이션의 인스턴스가 정상적으로 음성 캡춰 장치를 열었을 경우, 다른 DirectPlay Voice 애플리케이션은, 모두 그 장치를 사용할 수 없게 된다.

포커스를 결정하기 위해서(때문에) DirectPlay Voice 가 사용하는 윈도우를 지정하려면 , 음성 세션에 접속할 경우에,DVSOUNDDEVICECONFIG 구조체의 hwndApp 멤버에 윈도우 핸들을 할당한다. 포커스를 결정하려면 , 애플리케이션의 톱 레벨 윈도우의 윈도우 핸들을 사용한다. 데스크탑 윈도우를 사용해서는 안 된다. 데스크탑 윈도우를 사용하면 포커스의 결정에 모순이 생길 가능성이 있다.

캡춰 포커스가 처리 하면, DirectPlay 는, 포커스를 잃은 애플리케이션에 DVMSGID_LOSTFOCUS 메시지를 송신한다. 애플리케이션이 이 메시지를 수신 하면, 애플리케이션이 포커스를 재얻어온다까지, 캡춰는 정지한다. DirectPlay 는, 포커스를 취득한 애플리케이션에 DVMSGID_GAINFOCUS 메시지를 송신한다. 이 메시지는, 애플리케이션이 오디오의 캡춰를 시작 한 것을 나타낸다. 이것은, 포커스가 다른 애플리케이션으로 처리할 때까지 계속된다.

  여기에서는, 다른 프로세스간에 캡춰 포커스를 공유하는 방법에 대해 설명하고 있다. 그러나, 각 인스턴스에 독자적인 윈도우 핸들이 있는 경우, 1 개의 프로세스내에 있어, 복수의 인스턴스간에 캡춰 포커스를 공유할 수 있다.

엄격 모드

디폴트에서는, 캡춰 포커스를 유효하게 한 다른 DirectPlay Voice 애플리케이션이 foreground가 되었을 경우만, 애플리케이션은 캡춰 포커스를 잃는다. 애플리케이션은, foreground 애플리케이션은 아니게 되었을 경우에서도, 캡춰 포커스를 보관 유지할 수 있다. 이 경우, 캡춰 포커스를 유효하게 한 다른 애플리케이션보다, z 값이 높은 일이 유일한 조건이다. 애플리케이션이 foreground 애플리케이션일 때에만, 캡춰 포커스를 얻도록(듯이) 하려면 ,엄격 모드를 지정한다. 엄격 모드로, DirectPlay Voice 애플리케이션이 캡춰 포커스를 얻기 위해서(때문에)는, 액티브하고, z 값이 최대가 아니면 안된다. 이 상태를 잃어, 다른 애플리케이션이 얻어온다와 오디오 캡춰는 중지된다. 엄격 모드를 지정하려면 , 음성 세션에 접속할 경우에 DVSOUNDDEVICECONFIGdwFlags 멤버에 DVSOUNDCONFIG_STRICTFOCUS 플래그를 설정한다.

캡춰 포커스의 뮤트

오디오 캡춰를 뮤트 하면, 프로그램적으로 캡춰 포커스를 무효로 할 수 있다. 오디오 캡춰를 뮤트 하려면 ,IDirectPlayVoiceClient::SetClientConfig 를 호출해,DVCLIENTCONFIG 구조체의 dwFlags 멤버에 DVCLIENTCONFIG_RECORDMUTE 플래그를 설정한다. 오디오 캡춰를 뮤트 하면, 애플리케이션은 캡춰 포커스를 잃어, 캡춰 포커스를 가지고 있던 마지막 애플리케이션이, 한번 더 캡춰 포커스를 얻어온다. 다른 애플리케이션이 캡춰 포커스를 유효하게 하고 있지 않는 경우, DirectPlay 는 오디오 캡춰를 정지한다. 오디오 캡춰의 뮤트를 해제해, 캡춰 포커스의 재취득을 시도하려면 , DVCLIENTCONFIG_RECORDMUTE 플래그를 설정하지 않고 IDirectPlayVoiceClient::SetClientConfig 를 호출한다. 그러나, 이 조작에 의해, 반드시 캡춰 포커스가 애플리케이션에 돌아온다고는 할 수 없다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP