Platform SDK: DirectX

DSBUFFERDESC

DSBUFFERDESC 構造体は、新しい DirectSoundBuffer オブジェクトの特徴を示す。この構造体は、IDirectSound::CreateSoundBuffer メソッドによって使われる。

typedef struct { 
    DWORD           dwSize; 
    DWORD           dwFlags; 
    DWORD           dwBufferBytes; 
    DWORD           dwReserved; 
    LPWAVEFORMATEX  lpwfxFormat; 
    GUID            guid3DAlgorithm; 
} DSBUFFERDESC, *LPDSBUFFERDESC; 
 
typedef const DSBUFFERDESC *LPCDSBUFFERDESC;

メンバ

dwSize
この構造体のサイズ。単位はバイト。この構造体を使う前に、このメンバを初期化しなければならない。
dwFlags
新しい DirectSoundBuffer オブジェクトを作成するときに含める能力を識別するフラグ。以下のフラグが定義されている。「注意」を参照すること。
DSBCAPS_CTRL3D
バッファは 3D コントロール能力を備えていなければならない。
DSBCAPS_CTRLFREQUENCY
バッファは周波数コントロール能力を備えていなければならない。
DSBCAPS_CTRLPAN
バッファはパン コントロール能力を備えていなければならない。
DSBCAPS_CTRLPOSITIONNOTIFY
バッファは位置通知能力を備えていなければならない。VxD ドライバでは、サウンド バッファが DSBCAPS_CTRLPOSITIONNOTIFY で作成される場合、このバッファは常にソフトウェア バッファになる。ハードウェア バッファが利用可能な場合、WDM ドライバにより、通知可能なバッファがハードウェアに存在することがある。「注意」を参照すること。
DSBCAPS_CTRLVOLUME
バッファはボリューム コントロール能力を備えていなければならない。
DSBCAPS_GETCURRENTPOSITION2
IDirectSoundBuffer::GetCurrentPosition では、再生カーソルの新しい動作を使うべきである。DirectX 1 の DirectSound では、エミュレートされたサウンド カード上で再生カーソルは実際に再生されているサウンドよりはるかに前方にあり、書き込みカーソルの直後に置かれていた。以後のバージョンでは、DSBCAPS_GETCURRENTPOSITION2 フラグを指定すると、アプリケーションはより正確な再生位置を取得できる。このフラグを指定していない場合、互換性を保つ目的で以前の動作が維持される。このフラグは、エミュレートされたサウンド カードにのみ影響を及ぼす。DirectSound ドライバが存在する場合、どのバージョンの DirectX でも DirectSound の再生カーソルは正確な位置を示す。
DSBCAPS_GLOBALFOCUS
このバッファはグローバルなサウンド バッファである。このフラグを設定すると、ユーザーが他のアプリケーションにフォーカスを移動し、その新しいアプリケーションが DirectSound を使う場合でも、DirectSound を使っているアプリケーションは引き続きそのバッファを再生できる。1 つの例外は、協調レベルで DSSCL_WRITEPRIMARY フラグを設定した DirectSound アプリケーションにフォーカスを移動した場合である。この場合、他のアプリケーションからのグローバルなサウンドは聞こえなくなる。
DSBCAPS_LOCDEFER
再生時、バッファはハードウェアまたはソフトウェアのリソースに割り当てられる。このフラグは、ボイス管理を使うバッファに設定されなければならない。
DSBCAPS_LOCHARDWARE
バッファはハードウェア ミキシングを使う。デバイスがハードウェア ミキシングをサポートしていない場合や、必要なハードウェア メモリが利用不可能な場合は、IDirectSound::CreateSoundBuffer メソッドの呼び出しは失敗する。アプリケーションは、このバッファがミキシング チャンネルを利用可能であると保証する必要がある。この状況は保証されていない。
DSBCAPS_LOCSOFTWARE
DSBCAPS_STATIC が指定されていて、ハードウェア リソースが利用可能であっても、バッファをソフトウェア メモリに配置して、ソフトウェア ミキシングを使うようにする。
DSBCAPS_MUTE3DATMAXDISTANCE
サウンドは、最大距離で無音になる。最大距離を超えるとバッファの再生が停止するので、プロセッサ時間を消費しないですむ。
DSBCAPS_PRIMARYBUFFER
このバッファはプライマリ サウンド バッファである。この値を指定しない場合、セカンダリ サウンド バッファが作成される。
DSBCAPS_STATIC
オンボード ハードウェア メモリが利用可能な場合、バッファはそこに置かれる。このようなメモリが利用できない場合、エラーは発生しない。これに対して DSBCAPS_LOCHARDWARE は、バッファを強制的にハードウェア メモリ (おそらく、ドライバがバッファのミキシングに使うシステム メモリ) に置くので、このようなメモリが利用できない場合はエラーを引き起こす。
DSBCAPS_STICKYFOCUS
バッファは、スティッキー フォーカスを持つことになる。ユーザーが DirectSound を使っていない他のアプリケーションに切り替えた場合、アプリケーションの標準バッファは無音になるが、スティッキー フォーカス バッファは引き続き音を出す。
dwBufferBytes
新しいバッファのサイズ。単位はバイト。プライマリ バッファを作成するときは、この値は 0 でなければならない。セカンダリ バッファで許容される最小サイズと最大サイズは、dsound.h 内で定義される DSBSIZE_MIN、DSBSIZE_MAX である。
dwReserved
このメンバは予約されている。
lpwfxFormat
このバッファのウェーブ フォーマットを指定する構造体のアドレス。プライマリ バッファでは、この値は NULL でなければならない。アプリケーションは IDirectSoundBuffer::SetFormat を使って、プライマリ バッファのフォーマットを設定できる。
guid3DAlgorithm
DirectSound3D HEL が使う二重スピーカの仮想アルゴリズムのユニーク識別子。サウンド バッファに DSCAPS_CTRL3D フラグが設定されていない場合、この値は無視される。DSBCAPS_CTRL3D が dwFlags に設定されていない場合、このメンバは GUID_NULL (DS3DALG_DEFAULT) にすべきである。DirectX 7.0 以降のバージョンで有効。「注意」を参照すること。

次のアルゴリズム識別子が定義されている。

DS3DALG_DEFAULT
HEL がデフォルト アルゴリズムとして設定される。現在、これは DS3DALG_NO_VIRTUALIZATION アルゴリズムを選択する。このアルゴリズムは、3D エフェクト以外の CPU 効率を提供する。

ソフトウェア ミキシングのみに適用される。WDM または VxD ドライバで利用できる。

DS3DALG_NO_VIRTUALIZATION
Direct3D API は、標準の左右ステレオのパンにマップされる。左に 90 度のとき、サウンドは左スピーカだけから聞こえ、右に 90 度のとき、サウンドは右スピーカだけから聞こえる。垂直軸では、距離によってボリュームが調節されるだけである。このバッファでは、ドップラー シフトとボリューム調節は適用されるが、3D フィルタリングは行われない。これは最も効率的なソフトウェアの実装であるが、仮想 3D オーディオ エフェクトは提供しない。DS3DALG_NO_VIRTUALIZATION フラグを指定すると、HRTF 処理は行われない。DS3DALG_NO_VIRTUALIZATION は標準のステレオのパンのみを使うので、このアルゴリズムで作成されたバッファは、3D ハードウェア ボイスの空きを利用できない場合、2D ハードウェア ボイスによってアクセラレートされる。

ソフトウェア ミキシングにのみ適用される。WDM または VxD ドライバで利用できる。

DS3DALG_HRTF_FULL
3D API は、高品質な 3D オーディオ アルゴリズムで処理される。このフラグは、ソフトウェア HEL にのみ適用される。このアルゴリズムは最高品質の 3D オーディオ エフェクトを与えるが、より多くの CPU サイクルを使う。「注意」を参照すること。

ソフトウェア ミキシングにのみ適用される。WDM ドライバを使うと、Microsoft® Windows® 98 Second Edition と Windows 2000 で利用できる。

注 :  サウンド バッファを HRTF アルゴリズムを使って作成し、HRTF アルゴリズムがシステムで利用不可能な場合は (たとえば、WDM システムではない場合)、コード DS_NO_VIRTUALIZATION が返される。作成されたサウンド バッファは、代わりに DS3DALG_NO_VIRTUALIZATION を使う。これにより、アプリケーションは CreateSoundBuffer の呼び出し時に明示的に DS_OK をチェックするのではなく、SUCCEEDED マクロや FAILED マクロを使う必要がある。

DS3DALG_HRTF_LIGHT
3D API は、効率的な 3D オーディオ アルゴリズムで処理される。このフラグは、ソフトウェア HEL のみに適用される。このアルゴリズムは優れた 3D オーディオ エフェクトを与え、DS3DALG_HRTF_FULL ほど CPU に負荷をかけない。

ソフトウェア ミキシングにのみ適用される。WDM ドライバを使うと、Windows 98 Second Edition と Windows 2000 で利用できる。

注 :  サウンド バッファを HRTF アルゴリズムを使って作成し、HRTF アルゴリズムがシステムで利用不可能な場合は (たとえば、WDM システムではない場合)、コード DS_NO_VIRTUALIZATION が返される。作成されたサウンド バッファは、代わりに DS3DALG_NO_VIRTUALIZATION を使う。これにより、アプリケーションは CreateSoundBuffer の呼び出し時に明示的に DS_OK をチェックするのではなく、SUCCEEDED マクロや FAILED マクロを使う必要がある。

注意

プライマリ バッファを作成する際、アプリケーションは dwBufferBytes メンバを 0 に設定しなければならない。DirectSound は、使用する特定のサウンド デバイスに対して最適なバッファ サイズを決定する。作成されたプライマリ バッファのサイズを取得するには、IDirectSoundBuffer::GetCaps を呼び出す。

DSBCAPS_CTRLDEFAULT フラグはもうサポートされていない。このフラグは、DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY として定義された。必要なフラグだけを指定することにより、不必要なリソースを減らすことができる。

DSBCAPS_LOCHARDWARE と DSBCAPS_LOCSOFTWARE の各フラグはオプションであり、互いに排他的である。DSBCAPS_LOCHARDWARE は、強制的にバッファをハードウェアに配置する。これは、バッファがサウンド カードによってミキシングされることを意味する。DSBCAPS_LOCSOFTWARE は、強制的にバッファをソフトウェアに配置する。この場合、バッファは CPU によってミキシングされる。これらのフラグは DSBCAPS 構造体の dwFlags メンバ用にも定義されている。このメンバでこれらのフラグを使う場合、フラグは DirectSoundBuffer オブジェクトの実際の場所を示す。

3D アルゴリズムは、ソフトウェア エミュレーション レイヤのみの選択を行う。これは、アクセラレーション用のハードウェアがない場合に使われるソフトウェア アルゴリズムである。ハードウェアの利用を最大にするには、DS3DALG_NO_VIRTUALIZATION が特別な場合として扱われる。3D ハードウェア ボイスの空きを利用できない場合、バッファは 3D API コントロールと共に 2D バッファとして扱われる。特に、サウンド バッファを DS3DALG_NO_VIRTUALIZATION と DSBCAPS_LOCDER で作成する場合は、次の手順に従う。

DSSPEAKER_HEADPHONE や DSSPEAKER_STEREO 以外のスピーカ構成が有効な場合、この処理は二重スピーカ構成に対する処理と同じように行われる。

バッファを HRTF アルゴリズムを使って作成し、HRTF アルゴリズムがシステムで利用不可能な場合は (たとえば、WDM システムではない場合)、コード DS_NO_VIRTUALIZATION が返される。作成されたサウンド バッファは、代わりに DS3DALG_NO_VIRTUALIZATION を使う。これにより、アプリケーションは CreateSoundBuffer の呼び出し時に明示的に DS_OK をチェックするのではなく、SUCCEEDED マクロや FAILED マクロを使う必要がある。

DSBCAPS_CTRLPOSITIONNOTIFY フラグで作成されたサウンド バッファには、通知イベントを設定すべきである。このフラグでサウンド バッファを作成し、何も通知を設定しないと、動作は定義されない。

動作環境

  Windows NT/2000 : Windows 2000 が必要。
  Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
  ヘッダー : dsound.h で宣言。

参照

DSBUFFERDESC1