Share via


DirectSound バッファのプロパティ セット

サウンド カード上の拡張プロパティを利用するには、最初にそのドライバが IKsPropertySet インターフェイスをサポートしているかどうかを確認し、サポートしている場合はそのインターフェイスへのポインタを取得しなければならない。これを行うには、次のように、DirectSound 3D バッファ オブジェクト上の既存のインターフェイスに対して QueryInterface メソッドを呼び出す。

HRESULT hr = lpDirectSound3DBuffer->QueryInterface(
    IID_IKsPropertySet,
    (void**)&lpKsPropertySet));

この例では、lpDirectSound3DBuffer はバッファのインターフェイスへのポインタであり、IKsPropertySet インターフェイスが見つかった場合は、lpKsPropertySet がそのアドレスを受け取る。IID_IKsPropertySet は、Dsound.h で定義されている GUID である。バッファがハードウェア アクセラレートされていて、基になっているドライバがプロパティ セットをサポートしている場合に限り、インターフェイスを利用できる。

Dsound.h でのこのインターフェイスの宣言は、Ksproxy.h および Strmif.h での宣言とは異なる。プロジェクトに Ksproxy.h と Strmif.h が含まれていて、DirectSound の実装を使いたい場合は、まず Dsound.h をインクルードすること。そうしないと、IKsPropertySet のメソッドが呼び出されたときに、アプリケーションからの応答が停止する。

IKsPropertySet::QuerySupport メソッドを使えば、特定のプロパティを検索できる。PropertySetId パラメータの値は、ハードウェア ベンダーによって定義された GUID である。

特定のプロパティに対するサポートが存在すると確認した後は、IKsPropertySet::Set メソッドを使ってプロパティの状態を変更し、IKsPropertySet::Get メソッドを使って現在の状態を確認することができる。プロパティの状態の設定と取得は、pPropertyData パラメータを使って行う。

IKsPropertySet::SetpPropertyParams パラメータのオブジェクトに、追加のプロパティ パラメータを渡してもよい。このパラメータの正確な使用方法は、プロパティ セットに関するハードウェア ベンダーの仕様書で定義されるが、プロパティ セットのインスタンスを定義するために使われるのが普通である。実際には、pPropertyParams パラメータを使うことはほとんどない。