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);

制御セグメントによって設定されたテンポを調整するマスタ テンポを変更することもできる。「グローバル パラメータの設定と取得」を参照すること。