あるセグメントを再生しているとき、現在のセグメントを停止して他のセグメントを再生すると、耳障りな中断が発生します。トランジションはこれらの症状を解決してくれます。トランジションを利用するにはまずコンポーザーを作成します。
IDirectMusicComposer8* g_lpComposer = NULL; CoCreateInstance( CLSID_DirectMusicComposer, NULL, CLSCTX_INPROC, IID_IDirectMusicComposer8, (LPVOID*)&g_lpComposer );
トランジションを利用するには下記の関数を利用します。第2引数にセグメントを指定すれば演奏が再開され、NULLを指定すれば演奏が停止します。
g_lpComposer->AutoTransition( g_lpPerformance, // パフォーマンス g_lpSegment, // 次に演奏するセグメント。NULLで停止。 DMUS_COMMANDT_INTRO, // トランジションの作り方。 DMUS_COMPOSEF_MEASURE, // トランジションをどこから作るか。 NULL, // トランジションのコードマップ NULL, // トランジションを受け取る変数のアドレス NULL, // 次のセグメントの状態を受け取る変数のアドレス NULL // トランジションの状態を受け取る変数のアドレス );
ここまでの作業でスムーズな演奏の変更や停止を実現できます。例のソースを置いておきます。