Microsoft DirectX 8.0 (C++) |
パフォーマンスのテンポは、DirectMusic で使用される 2 種類のタイムの変換を指示し、音楽境界のイベントの分解能を制御する(「クロック タイムとミュージック タイム」を参照すること)。通常、制御セグメントのテンポ トラックがテンポを管理するが、アプリケーションで動的にテンポを設定することもできる。
テンポを変更する方法は 2 つある。メッセージを送信する方法と、制御セグメントにトラック パラメータを設定する方法である。
次のサンプル コードでは、メッセージを送信してテンポを変更している。
// pIDMSegment は有効な IDirectMusicSegment8 であり、 // IDMPerformance は有効な IDirectMusicPerformance8 であると仮定する。 // セグメントのテンポ トラックを無効にして、テンポをリセットしないようにする。 pIDMSegment->SetParam( GUID_DisableTempo, 0xFFFF,0,0, NULL ); DMUS_TEMPO_PMSG* pTempo; if( SUCCEEDED(pIDMPerformance->AllocPMsg( sizeof(DMUS_TEMPO_PMSG), (DMUS_PMSG**)&pTempo))) { // テンポ イベントをキューに格納する。 ZeroMemory(pTempo, sizeof(DMUS_TEMPO_PMSG)); pTempo->dwSize = sizeof(DMUS_TEMPO_PMSG); pTempo->dblTempo = 100; pTempo->dwFlags = DMUS_PMSGF_REFTIME; pTempo->dwType = DMUS_PMSGT_TEMPO; pIDMPerformance->SendPMsg((DMUS_PMSG*)pTempo); }
次の例は、テンポ パラメータを変更する方法を示している。詳細については、「トラック パラメータの設定と取得」を参照すること。
DMUS_TEMPO_PARAM Tempo; Tempo.dblTempo = 100; pIDMSegment->SetParam(GUID_TempoParam, 0xFFFF, 0, 0, &Tempo);
制御セグメントによって設定されたテンポを調整するマスタ テンポを変更することもできる。「グローバル パラメータの設定と取得」を参照すること。