Microsoft DirectX 8.0 (C++) |
A motif is a special kind of pattern in a style intended to be played over the basic style pattern, typically in response to an interactive event. Although a motif can be as complex as any other pattern, even containing variations and multiple instrument parts, usually it is a short, simple musical figure that sounds good against a variety of background patterns. It might also be a sound effect played by a custom DLS instrument or instruments.
All the motifs authored into a style become available to you as soon as you have loaded that style. To get a particular motif ready for playback, call the IDirectMusicStyle8::GetMotif method, passing in the following parameters:
The following example function obtains and plays the motif whose name is passed in as pwszMotifName:
void PlayMotif(IDirectMusicPerformance8* pPerf, IDirectMusicStyle8* pStyle, WCHAR* pwszMotifName) { IDirectMusicSegment* pSeg; // Get the motif segment from the style. Check for S_OK // specifically, because GetMotif() returns S_FALSE if it // does not find the motif. if (S_OK == pStyle->GetMotif(pwszMotifName, &pSeg)) { // Play the segment. pPerf->PlaySegment(pSeg, DMUS_SEGF_BEAT | DMUS_SEGF_SECONDARY, 0, NULL); pSeg->Release(); } }
Note that pSeg is played as a secondary segment, because a motif is normally played over a primary segment. You cannot play a motif as a primary segment, because it does not have a chord track or band track. If you do want to play a motif against silence, create a primary segment from a style that has only blank patterns, and keep that segment playing while you play the motif.