Platform SDK: DirectX |
モチーフとは、通常はインタラクティブ イベントに応じて演奏されるもので、基本的なスタイル パターン上で演奏されることを意図した、スタイル内の特種なパターンである。モチーフには、ほかのパターンと同様の複雑さを与えることができる。また、バリエーションや複数の音色パートを備えることも可能であるが、通常はさまざまなバックグラウンド パターンと組み合わせても適切に聞こえる、短い単純な音型である。カスタム DLS 音色で演奏するサウンド エフェクトにもなる。
どのモチーフもスタイルの一部としてオーサリングされるので、スタイルをロードするとすぐにモチーフを利用できる。特定のモチーフを再生できるようにするには、IDirectMusicStyle::GetMotif メソッドを呼び出し、次のパラメータを渡す。
次のコード例では、pwszMotifName で名前を指定されたモチーフを取得し、演奏する。
void PlayMotif(IDirectMusicPerformance* pPerf, IDirectMusicStyle* pStyle, WCHAR* pwszMotifName) { IDirectMusicSegment* pSeg; // スタイルからモチーフ セグメントを取得する。GetMotif() は、 // モチーフを見つけられなかった場合は S_FALSE を返すので、 // S_OK が返されることを確認する。 if (S_OK == pStyle->GetMotif(pwszMotifName, &pSeg)) { /* セグメントを演奏する。DMUS_SEGF_BEAT は、現在演奏中のセグメントが ある場合に、次の拍を演奏することを意味する。DMUS_SEGF_SECONDARY は、 セグメントをセカンダリ セグメントとして演奏することを意味する。 セカンダリ セグメントは、現在演奏中のプライマリ セグメント上で演奏される。0 は、 すぐに演奏を開始することを意味する。最後の NULL は、 再生の状態を追跡する必要がないため、 最後のパラメータに IDirectMusicSegmentState* を返さないことを意味する。*/ pPerf->PlaySegment(pSeg, DMUS_SEGF_BEAT | DMUS_SEGF_SECONDARY, 0, NULL); pSeg->Release(); } }
通常、モチーフはプライマリ セグメントに重ねて演奏されるため、pSeg はセカンダリ セグメントとして演奏される点に注意すること。モチーフにはコード トラックやバンド トラックがないため、これをプライマリ セグメントとして演奏することはできない。無音の状態のときにモチーフを演奏する場合は、スタイルから空白のパターンだけを含むプライマリ セグメントを作成し、モチーフを演奏する間、このセグメントを演奏しておく。
どのモチーフもスタイルの一部としてオーサリングされるので、スタイルをロードするとすぐにモチーフを利用できる。特定のモチーフを再生できるようにするには、IDirectMusicStyle::GetMotif メソッドを呼び出し、モチーフの名前を渡す。この情報はスタイルのドキュメントで確認するか、DirectMusicStyle.GetMotifName メソッドを使ってインデックス値から取得する。
次のコード例では、スタイルの最初のモチーフを取得して演奏している。
' style は DirectMusicStyle である。 ' perf は DirectMusicPerformance である。 Dim MotifName As String Dim segMotif As DirectMusicSegment MotifName = style.GetMotifName(0) Set segMotif = style.GetMotif(MotifName) Call perf.PlaySegment(segMotif, DMUS_SEGF_SECONDARY, 0)
通常、モチーフはプライマリ セグメントに重ねて演奏されるため、segMotif はセカンダリ セグメントとして演奏される点に注意すること。モチーフにはコード トラックやバンド トラックがないため、これをプライマリ セグメントとして演奏することはできない。無音の状態のときにモチーフを演奏する場合は、スタイルから空白のパターンだけを含むプライマリ セグメントを作成し、モチーフを演奏する間、このセグメントを演奏しておく。