Platform SDK: DirectX

テンポの変更

パフォーマンスのテンポは、DirectMusic で使用される 2 種類のタイムの変換を指示し、音楽境界のイベントの分解能を制御する (「クロック タイムとミュージック タイム」を参照すること)。通常は、プライマリ セグメントのテンポ トラックがテンポを制御するが、アプリケーションで動的にテンポを設定することもできる。

[C++]

テンポを設定する方法には、メッセージを送信する方法と、トラック パラメータを設定する方法の 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);
[Visual Basic]

テンポを設定する方法には、マスタ テンポを設定する方法と、テンポ メッセージを送信する方法の 2 つがある。

マスタ テンポは、パフォーマンスのすべてのテンポに乗算する係数である。たとえば、0.75 のパラメータで DirectMusicPerformance.SetMasterTempo を呼び出してマスタ テンポを設定し、1 分間に 120 拍のテンポを持つセグメントを演奏する場合、セグメントは 90 のテンポで演奏される。

DirectMusicPerformance.SendTempoPMSG メソッドを使ってテンポを送信すると、メッセージのスタンプに指定されたタイムにテンポが変更される。新しいテンポは、アプリケーションから直接、または演奏されているセグメントによって、ほかのテンポ メッセージが送信されるまで有効である。テンポの値は、マスタ テンポによって変更することができる。

次の呼び出しでは、直ちに 1 分間に 100 拍のテンポに設定される。perfDirectMusicPerformance オブジェクトを表す。lTime パラメータに 0 を渡して、メッセージを直ちに送信するように指定する場合は、DMUS_PMSGF_REFTIME フラグも設定しなければならない。

Call perf.SendTempoPMSG(0, DMUS_PMSGF_REFTIME, 100)