DirectMusic DirectMusic 의 고도의 주제 DirectMusic 포트의 사용법   [목차열람] [주소복사] [슬롯비우기]
DirectMusic 포트의 사용법
 
Microsoft DirectX 9.0

DirectMusic 포트의 사용법

여기에서는, DirectMusic 포트에의 액세스에 대해 설명한다. 이것은, 보통, 오디오 패스를 사용하지 않는 애플리케이션에 대해서만 필요하다. 포트는, 데이터의 송신 또는 수신을 실시하는 장치이다. 하드웨어 장치, 소프트웨어 신디사이저, 소프트웨어 필터의 어느쪽이든을 나타낸다.

DirectMusic 애플리케이션내의 각 포트는,IDirectMusicPort8 인터페이스로 나타낸다. 이 인터페이스의 메서드를 사용해, 장치에 관한 정보의 취득, 장치내의 메모리의 관리,DLS 음색의 다운로드와 언로드, 유입 데이터의 읽어들여, 재생 버퍼의 삽입을 실시한다.

추천 되고 있도록(듯이), 애플리케이션이 IDirectMusicPerformance8::InitAudio 를 사용해 퍼포먼스를 초기화하는 경우는, 오디오 패스가, 포트 및퍼포먼스 채널 의 포트에의 맵핑을 관리한다. 오디오 패스내의 포트에의 인터페이스는,IDirectMusicPerformance8::PChannelInfo 메서드를 사용해 취득할 수 있다.

어느 퍼포먼스도 적어도 1 개의 포트를 갖추지 않으면 안 된다. 디폴트 포트 이외의 포트를 사용하는 경우나, 디폴트 포트의 특별한 파라미터를 설정하는 경우는, 우선 DMUS_PORTPARAMS8 구조체를 설정한다. 모든 멤버에 값을 입력할 필요는 없지만,dwValidParams 멤버에 적절한 플래그를 기입하는 것으로, 유효한 정보를 가지고 있는 멤버를 DirectMusic 에 알리지 않으면 안 된다. 다음에, 이 구조체를 IDirectMusic8::CreatePort 메서드에 건네준다.

다음 샘플 함수는, 디폴트의 출력 포트용의 개체를 생성 해, 포트에 5 개의 채널 그룹을 설정하는 방법을 나타내고 있다.

HRESULT CreateTypicalPort(IDirectMusic8* pDM)
{
  IDirectMusicPort8*  pPort;
  DMUS_PORTPARAMS  dmos;
 
  if (NULL == pDM) return E_INVALIDARG;
  ZeroMemory(&dmos, sizeof(DMUS_PORTPARAMS));
  dmos.dwSize = sizeof(DMUS_PORTPARAMS);
  dmos.dwValidParams = DMUS_PORTPARAMS_CHANNELGROUPS;
  dmos.dwChannelGroups = 5;
  return pDM->CreatePort(GUID_NULL, &dmos, &pPort, NULL);
}

포트를 생성 한 후,IDirectMusic8::Activate 또는 IDirectMusicPort8::Activate 를 호출해 액티브하게 해,IDirectMusicPerformance8::AddPort 메서드를 사용해 퍼포먼스에 부가할 필요가 있다.

포트를 퍼포먼스에 부가할 경우에는,IDirectMusicPerformance8::AssignPChannelBlock 메서드를 호출해,퍼포먼스 채널 의 블록을 할당한다. 이 처리가 필요없는 것은, IDirectMusicPerformance8::AddPort 에 NULL 를 건네주어 디폴트 포트를 추가하는 경우 뿐이다. 이 경우, P 채널의 0 ~ 15 는, 포트의 최초의 그룹의 MIDI 채널에 할당할 수 있다.

IDirectMusicPerformance8::AssignPChannelBlock 메서드 및 IDirectMusicPerformance8::AssignPChannel 메서드를 사용하면 P 채널을 다른 방법으로 할당하거나 다른 P 채널을 추가하거나 P 채널을 다른 포트에 할당하거나 할 수가 있다.

포트의 더 자세한 정보는, 다음 주제를 참조할것.

↑TOP