DirectMusic DirectMusic C++ 샘플 Play Motif 샘플   [목차열람] [주소복사] [슬롯비우기]
Play Motif 샘플
 
Microsoft DirectX 9.0

Play Motif 샘플

Play Motif 샘플에서는, 2차 세그먼트(segment)로서 연주되는 모티프를 1차 세그먼트(segment)의 리듬에 가지런히 하는 다양한 방법이 나타나고 있다.

패스

소스 :(SDK 루트) \Samples\C++\DirectMusic\PlayMotif

실행 가능 파일 :(SDK 루트) \Samples\C++\DirectMusic\Bin

사용자가이드

디폴트의 세그먼트(segment)를 연주하는지, 모티프를 포함한스타일 에 근거하는 다른 DirectMusic 세그먼트(segment)를 로드한다. 리스트 박스로부터 패턴을 1 개 선택해,[Align Option] 버튼의 어느쪽이든을 선택해,[Play Motif] 를 클릭한다. 1차 세그먼트(segment)의 적절한 경계에 도달할 때까지, 모티프의 연주는 시작 되지 않는다.

프로그래밍 메모

Play Motif 샘플은,Play Audio 샘플 과 형식이 자주(잘) 비슷하다.

파일을 로드할 때, Play Motif 는, Play Audio와 같은 순서에 가세해,LoadSegmentFile 함수는 다음의 처리를 실행한다.

  1. 루프 처리에 의해, 세그먼트(segment)에 포함되는 스타일내의 모티프를 검색한다. 샘플 프레임워크(framework)의 CMusicSegment::GetStyle 메서드를 호출한다. 이 메서드는,IDirectMusicSegment8::GetParam 를 호출해 GUID_IDirectMusicStyle 와 인크리먼트(increment) 하는 인덱스를 건네주어, 각 스타일을 얻어온다. 이 메서드는, 다음에 검색해야 할 스타일이 없어지면 실패한다.
  2. 각 스타일에 대해 IDirectMusicStyle8::EnumMotif 를 호출해, 인크리먼트(increment) 하는 모티프 인덱스를 건네준다. 이 호출에서는, 그 인덱스의 모티프명이 취득된다. S_FALSE 가 돌려주어졌을 경우는, 그 스타일내에 그 밖에 모티프가 없는 것을 의미한다.
  3. 모티프명을 IDirectMusicStyle8::GetMotif 에 건네주어, 모티프에의 IDirectMusicSegment8 인터페이스 포인터를 취득해, 이것을 리스트 박스내의 항목으로 관련지을 수 있었던 데이터로서 보존한다.

[Play Motif] 를 클릭 하면,OnPlayMotif 함수에 의해 다음의 태스크가 실행된다.

  1. 인터페이스로부터 목적의 아라이먼트오프션을 얻어온다.
  2. 리스트 박스로 선택된 모티프와 그 MOTIF_NODE 항목 데이터를 얻어온다. MOTIF_NODE 구조체는, 현재 행해지고 있는 연주의 회수의 카운트와 모티프의 IDirectMusicSegment 인터페이스의 포인터를 보관 유지한다.
  3. IDirectMusicPerformance8::PlaySegment 를 호출해, 모티프의 IDirectMusicSegment 및 DMUS_SEGF_SECONDARY 와 임의의 아라이먼트오프션을 포함한 플래그를 건네준다.

DirectMusic 통지는, Play Audio 와 거의와 같이 처리된다. 다만, 이 애플리케이션은, 시작 또는 종료하는 모티프의 노트를 취득해 MOTIF_NODE 구조 체내의 연주 카운트를 갱신하는 처리도 실시한다. 연주 카운트가 0 보다 큰 경우는, 사용자 인터페이스를 갱신해 그 모티프가 연주중인 것을 나타낸다.

참조

↑TOP