DirectMusic DirectMusic 의 고도의 주제 DirectMusic 포트의 프로퍼티 세트   [목차열람] [주소복사] [슬롯비우기]
DirectMusic 포트의 프로퍼티 세트
 
Microsoft DirectX 9.0

DirectMusic 포트의 프로퍼티 세트

프로퍼티 세트를 사용하는 것으로, DirectMusic 는, 신디사이저에 의해 제공되는 확장 서비스를 지원 할 수 있다.

하드웨어 벤더는 새로운 능력을 프로퍼티로서 정의해, 그 프로퍼티의 사양을 공개한다. GUID 가 프로퍼티 세트를 나타내, ULONG 가 세트내의 특정의 프로퍼티를 나타낸다. 개별의 프로퍼티에 파라미터를 관련지어도 괜찮다. 파라미터의 의미는, 프로퍼티와 함께 정의된다.

프로퍼티가 이용 가능한가 어떤가를 확인해, 그 프로퍼티의 값을 설정 및 얻어오려면,IKsControl::KsProperty 메서드를 사용한다. IDirectMusicPort8::QueryInterface 메서드를 호출해, 인터페이스 식별자로서 IID_IKsControl 를 건네주는 것으로, 포트에 대한 IKsControl 인터페이스를 취득할 수 있다.

프로퍼티 세트는 GUID 에 의해 나타내져 세트내의 각 항목은 0 으로부터 시작되는 인덱스로 나타낸다. GUID 에 대해서 인덱스화 된 항목의 의미가 변경될 것은 없다. DirectMusic 가 지원 하는 프로퍼티 세트의 리스트에 대해서는, 「KSPROPERTY 」를 참조할것.

DirectMusic 로 미리 정의되고 있는 프로퍼티 세트는 모두, 다만 1 개의 항목을 가지고 있어 보통, 인덱스 번호는 0 으로 설정되어 있다. 다만, 커널 스트리밍 (KS) 프로퍼티의 완전한 정의가 지원 되고 있어 벤더는 임의의 수의 항목과 인스턴스, 임의의 사이즈의 데이터를 가지는 프로퍼티 세트를 자유롭게 생성 할 수 있다.

포트에 대한 프로퍼티 항목의 요구의 루팅은, 포트의 처리에 따라서 다르다. Win32® 핸들 베이스의 멀티미디어 호출 (midiOut 함수와 midiIn 함수)에 대한 DirectMusic 의 에뮬레이션을 나타내는 포트에서는, 어느 프로퍼티도 지원 되지 않는다.

다음 샘플 코드에서는,IKsControl::KsProperty 메서드를 사용해, 포트가 General MIDI 사운드 세트를 하드웨어로 지원 하고 있을지 어떨지를 조사하고 있다.

#include <dmksctrl.h>

BOOL IsGMSupported(IDirectMusicPort8 *pPort) 
{ 
  HRESULT   hr; 
  IKsControl  *pControl; 
  KSPROPERTY  ksp; 
  DWORD   dwFlags; 
  ULONG   cb; 
  BOOL    fIsSupported;
 
  hr = pPort->QueryInterface(IID_IKsControl, (void**) &pControl); 
  if (FAILED(hr)) 
  { 
    // 포트는 프로퍼티를 지원 하지 않는다. GM 는 지원되지 않은 것이라고 본다.
    return FALSE; 
  }
  ksp.Set = GUID_DMUS_PROP_GM_Hardware; 
  ksp.Id  = 0; 
  ksp.Flags = KSPROPERTY_TYPE_BASICSUPPORT;
  hr = pControl->KsProperty(&ksp, sizeof(ksp),
    &dwFlags, sizeof(dwFlags), &cb);
  fIsSupported = FALSE; 
  if ((SUCCEEDED(hr)) || (cb >= sizeof(dwFlags)))
  {
    // 지원 되고 있다.
    fIsSupported = (BOOL)(dwFlags & KSPROPERTY_TYPE_GET);
  }
  pControl->Release();
  return fIsSupported;
}
↑TOP