DSBUFFERDESC

DSBUFFERDESC 構造体は、新しいバッファー オブジェクトの特性を表します。これは、IDirectSound8::CreateSoundBuffer メソッドおよび DirectSoundFullDuplexCreate8 関数で使用されます。

DirectX 7 以前との互換性を確保するために、この構造体の以前のバージョンである DSBUFFERDESC1 も Dsound.h で維持されています。

typedef struct DSBUFFERDESC {
    DWORD dwSize;
    DWORD dwFlags;
    DWORD dwBufferBytes;
    DWORD dwReserved;
    LPWAVEFORMATEX lpwfxFormat;
    GUID guid3DAlgorithm;
} DSBUFFERDESC;

メンバ

  • dwSize
    構造体のサイズ (バイト単位) です。構造体を使用する前に、このメンバーを初期化する必要があります。

  • dwFlags
    バッファーの能力を指定するフラグです。有効なフラグの詳細なリストについては、DSBCAPS 構造体の dwFlags メンバーを参照してください。

  • dwBufferBytes
    新しいバッファーのサイズ (バイト単位) です。DSBCAPS_PRIMARYBUFFER フラグを使用してバッファーを作成するときは、この値を 0 にする必要があります。セカンダリ バッファーの場合、許容される最少および最大サイズは Dsound.h で定義されている DSBSIZE_MIN および DSBSIZE_MAX で指定します。

  • dwReserved
    予約済みです。0 を指定します。

  • lpwfxFormat
    バッファーの Wave フォーム フォーマットを指定する WAVEFORMATEX または WAVEFORMATEXTENSIBLE 構造体のアドレスです。プライマリ バッファーの場合、この値は NULL にする必要があります。

  • guid3DAlgorithm
    DirectSound3D ハードウェア エミュレーションで使用される、2 スピーカー仮想化アルゴリズムの一意の識別子です。dwFlags で DSBCAPS_CTRL3D を設定しない場合、このメンバーは GUID_NULL (DS3DALG_DEFAULT) にする必要があります。次のアルゴリズム識別子が定義されています。

    説明可用性
    DS3DALG_DEFAULTDirectSound は既定のアルゴリズムを使用します。ほとんどの場合、これは DS3DALG_NO_VIRTUALIZATION です。WDM ドライバーでは、コントロール パネルでサラウンド サウンド スピーカーの構成を選択した場合、指向性を持つ使用可能なスピーカーの間でサウンドがパンされます。ソフトウェア ミキシングのみに適用されます。WDM または Vxd ドライバー使用できます。
    DS3DALG_NO_VIRTUALIZATION3D 出力は、通常の左右のステレオ パンにマッピングされます。左へ 90 度では、サウンドは左スピーカーのみから聞こえ、右へ 90 度では、サウンドは右スピーカーからのみ聞こえます。距離によるボリュームのスケーリングを除き、垂直軸は無視されます。このバッファーでは、ドップラー偏移とボリュームのスケーリングは引き続き適用されますが、3 D フィルタリングは実行されません。これは、最も効率的なソフトウェア実装ですが、仮想 3D オーディオ エフェクトは使用できません。DS3DALG_NO_VIRTUALIZATION アルゴリズムを指定した場合、HRTF 処理は実行されません。DS3DALG_NO_VIRTUALIZATION は通常のステレオ パンのみを使用するため、3D ハードウェア ボイスを利用できない場合、このアルゴリズムを使用して作成されたバッファーは 2D ハードウェア ボイスによって高速化できます。 ソフトウェア ミキシングのみに適用されます。WDM または Vxd ドライバー使用できます。
    DS3DALG_HRTF_FULL3D API は、高品質 3D オーディオ アルゴリズムを使用して処理されます。このアルゴリズムは、高品質の 3D オーディオ エフェクトを提供しますが、より多くの CPU サイクルを使用します。「解説」を参照してください。ソフトウェア ミキシングのみに適用されます。WDM ドライバーを使用する場合は、Microsoft Windows 98 Second Edition 以降のオペレーティング システムで使用できます。
    DS3DALG_HRTF_LIGHT3D API は、効率的な 3D オーディオ アルゴリズムを使用して処理されます。このアルゴリズムは良好な 3D オーディオ エフェクトを提供し、使用する CPU サイクルは DS3DALG_HRTF_FULL よりも少なくてすみます。ソフトウェア ミキシングのみに適用されます。WDM ドライバーを使用する場合は、Windows 98 Second Edition 以降のオペレーティング システムで使用できます。

解説 

プライマリ バッファーを作成するときは、dwBufferBytes メンバーをゼロに設定する必要があります。DirectSound は、使用中の特定のサウンド デバイスに対して最適なバッファー サイズを決定します。作成したプライマリ バッファーのサイズを決定するには、IDirectSoundBuffer8::GetCaps を呼び出します。

DSBCAPS_CTRLDEFAULT フラグはサポートされていません。このフラグは、DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY として定義されていました。必要なフラグのみを指定することで、不要なリソースの使用を避けることができます。

VXD ドライバーでは、VXD ドライバー モデルが通知をサポートしていないため、DSBCAPS_CTRLPOSITIONNOTIFY を使用して作成されたサウンド バッファーは常にソフトウェア バッファーです。WDM ドライバーでは、ハードウェア リソースを使用できる場合、通知対応のバッファーをハードウェアに置くことができます。

DSBCAPS_LOCHARDWARE フラグと DSBCAPS_LOCSOFTWARE フラグは省略可能であり、相互に排他的です。DSBCAPS_LOCHARDWARE はバッファーをハードウェアに強制配置します。つまり、バッファーはサウンド カードでミックスされます。DSBCAPS_LOCSOFTWARE はバッファーをソフトウェアに置くように強制し、バッファーは CPU によりミックスされます。これらのフラグは、DSBCAPS のメンバーの dwFlags に対しても定義されます。

3D アルゴリズムは、ソフトウェア エミュレーション レイヤーのみ選択可能であることを意味します。つまり、このアルゴリズムは、高速化用のハードウェアがない場合に使用されるソフトウェア アルゴリズムです。DS3DALG_NO_VIRTUALIZATION は、ハードウェアの使用率を最大限度に高めるために、特殊なケースとして扱われます。空いている 3D ハードウェア ボイスを使用できない場合、バッファーは 3D 制御機能を持つ 2D バッファーとして扱われます。特に、サウンド バッファーを DS3DALG_NO_VIRTUALIZATION を使用して作成するとき、または DSBPLAY_LOCDEFER を使用して作成されたバッファーが再生されるとき、次の手順が実行されます。

  1. 空いているハードウェア 3D ボイスがある場合、その 3D ハードウェア ボイスが使用されます。
  2. 空いているハードウェア 3D ボイスがなく、2D ハードウェア ボイスを使用できる場合、2D ハードウェア ボイスが使用されます。これは、DS3DALG_NO_VIRTUALIZATION アルゴリズムが簡素なステレオ パン アルゴリズムであるため可能になります。
  3. 空いている 2D または 3D ハードウェア ボイスがない場合、ボイスは DS3DALG_NO_VIRTUALIZATION アルゴリズムを使用してソフトウェアで再生されます。

DSSPEAKER_HEADPHONE または DSSPEAKER_STEREO 以外のスピーカー構成である場合、処理は 2 スピーカー構成の場合と同様に行われます。

バッファーがいずれかの HRTF アルゴリズムを使用して作成され、システムで HRTF アルゴリズムを使用できない場合 (非 WDM システムなど)、サクセス コードの DS_NO_VIRTUALIZATION が返されます。作成されたサウンド バッファーは、代わりに DS3DALG_NO_VIRTUALIZATION を使用します。この理由により、アプリケーションでは CreateSoundBuffer を呼び出すときに DS_OK を明示的に確認するのではなく、SUCCEEDED または FAILED マクロを使用する必要があります。

要件

ヘッダー: DSound.h 宣言

関連項目

DirectSound バッファー | 動的な音声管理 | IDirectSound8::CreateSoundBuffer