Platform SDK: DirectX |
パフォーマンスのテンポは、DirectMusic で使用される 2 種類のタイムの変換を指示し、音楽境界のイベントの分解能を制御する (「クロック タイムとミュージック タイム」を参照すること)。通常は、プライマリ セグメントのテンポ トラックがテンポを制御するが、アプリケーションで動的にテンポを設定することもできる。
テンポを設定する方法には、メッセージを送信する方法と、トラック パラメータを設定する方法の 2 つがある。
次のコード例では、メッセージを送信してテンポを変更している。
/* pIDMSegment は有効な IDirectMusicSegment であり、 IDMPerformance は有効な IDirectMusicPerformance であるとする。*/ // セグメントのテンポ トラックを無効にして、テンポをリセットしないようにする。 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);
テンポを設定する方法には、マスタ テンポを設定する方法と、テンポ メッセージを送信する方法の 2 つがある。
マスタ テンポは、パフォーマンスのすべてのテンポに乗算する係数である。たとえば、0.75 のパラメータで DirectMusicPerformance.SetMasterTempo を呼び出してマスタ テンポを設定し、1 分間に 120 拍のテンポを持つセグメントを演奏する場合、セグメントは 90 のテンポで演奏される。
DirectMusicPerformance.SendTempoPMSG メソッドを使ってテンポを送信すると、メッセージのスタンプに指定されたタイムにテンポが変更される。新しいテンポは、アプリケーションから直接、または演奏されているセグメントによって、ほかのテンポ メッセージが送信されるまで有効である。テンポの値は、マスタ テンポによって変更することができる。
次の呼び出しでは、直ちに 1 分間に 100 拍のテンポに設定される。perf は DirectMusicPerformance オブジェクトを表す。lTime パラメータに 0 を渡して、メッセージを直ちに送信するように指定する場合は、DMUS_PMSGF_REFTIME フラグも設定しなければならない。
Call perf.SendTempoPMSG(0, DMUS_PMSGF_REFTIME, 100)