Microsoft DirectX 8.0 (C++)

パフォーマンスの作成

パフォーマンス オブジェクトは再生全般を管理する。パフォーマンス オブジェクトは、次のタスクを実行する。

ほとんどのアプリケーションは、パフォーマンス オブジェクトを 1 つだけ使用するが、マスタ テンポやボリュームなどのパラメータの異なる複数のパフォーマンスを使用することもできる。

次のサンプル コードでは、パフォーマンスを 1 つ作成して、IDirectMusicPerformance8 インターフェイスへのポインタを取得している。

IDirectMusicPerformance8* pPerf;
 
if (FAILED(CoCreateInstance(
        CLSID_DirectMusicPerformance,
        NULL,
        CLSCTX_INPROC, 
        IID_IDirectMusicPerformance8,
        (void**)&pPerf
    )))
{
    pPerf = NULL;
}

作成したパフォーマンスは初期化しなければならない。推奨されているように、アプリケーションでオーディオパスを使用している場合は、IDirectMusicPerformance8::InitAudio メソッドを呼び出さなければならない。アプリケーションで以前のチャンネルとポートのマッピング モデルを使用している場合は、代わりに IDirectMusicPerformance8::Init を呼び出す。詳細については、「ポートからオーディオパスへの移行」を参照すること。

初期化における重要な処理は、DirectMusic オブジェクトの作成である。既存の IDirectMusic8 インターフェイス ポインタを IDirectMusicPerformance8::InitAudio に渡すこともできるが、ほとんどの場合 InitAudio で DirectMusic オブジェクトを作成する方が便利である。ポートおよびマスタ クロックに対して必要な制御の程度に応じて、IDirectMusic8 インターフェイスへのポインタを取得するかどうかを選択することもできる。ほとんどのアプリケーションでは、IDirectMusic8 のメソッドにアクセスする必要はないので、InitAudioppDirectMusic パラメータとして NULL を渡すことができる。

InitAudio は、既存の DirectSound オブジェクトを取ることもできる。DirectSound はシンセサイザから出力されたサウンド データを管理する。ほとんどの場合、InitAudio でこのオブジェクトを作成できる。このオブジェクトへのインターフェイスは、DirectSoundCapture オブジェクトを作成したり、DirectMusic のパフォーマンスではなくバッファ内で直接ウェーブを再生するなど、DirectSound をほかの用途にしない限り必要がない。

DMUS_AUDIOPARAMS 構造体を InitAudio に渡すことによって、アプリケーションはシンセサイザの機能を要求したり、デフォルト以外のシンセサイザを設定できる。ほとんどのアプリケーションでは、この処理の必要はない。

次のサンプル コードでは、DirectMusic および DirectSound オブジェクトへのポインタを取得せずに、パフォーマンスを初期化している。16 のパフォーマンス チャンネルと、ポート上で使用可能なすべての機能を持つ、デフォルトの標準オーディオパスを作成する。

// hWnd はアプリケーション ウィンドウ ハンドルである。
 
if (SUCCEEDED(pPerf->InitAudio(NULL, NULL, hWnd, 
        DMUS_APATH_SHARED_STEREOPLUSREVERB, 16, 
        DMUS_AUDIOF_ALL, NULL)))
{
    // パフォーマンスの初期化。
}