次の方法で共有


IDirectSound8::DuplicateSoundBuffer

DuplicateSoundBuffer メソッドは元のバッファーのメモリーを共有する新しいセカンダリ バッファーを作成します。

HRESULT 
DuplicateSoundBuffer(
  LPDIRECTSOUNDBUFFER pDSBufferOriginal,
  LPDIRECTSOUNDBUFFER * ppDSBufferDuplicate
);

パラメータ

  • pDSBufferOriginal
    複製するバッファーの IDirectSoundBuffer インターフェイスまたは IDirectSoundBuffer8 インターフェイスのアドレスです。
  • ppDSBufferDuplicate
    新しいバッファーの IDirectSoundBuffer インターフェイス ポインターを受け取る変数のアドレスです。

戻り値

成功した場合は、DS_OK を返します。失敗した場合は、次のいずれかのエラー値を返します。

リターン コード
DSERR_ALLOCATED
DSERR_INVALIDCALL
DSERR_INVALIDPARAM
DSERR_OUTOFMEMORY
DSERR_UNINITIALIZED

解説 

このメソッドは、DSBCAPS_CTRLFX フラグを指定して作成されたバッファーには無効です。

最初、複製されたバッファーのパラメーターは元のバッファーと同じです。ただし、アプリケーションは各バッファーのパラメーターを個別に変更でき、各バッファーは互いに影響を及ぼすことなく再生または停止することができます。

バッファー メモリーを参照する最後のオブジェクトが解放されると、バッファー メモリーは解放されます。

複製されたバッファーのボリューム レベルには既知の問題が存在します。複製されたバッファーは、元のバッファーのボリューム設定と異なる値にボリュームを変更しない限り、最大ボリュームで再生されます。ボリュームが同じままである場合 (IDirectSoundBuffer8::SetVolume の呼び出しによって、複製されたバッファーで明示的に同じボリュームを設定した場合でも)、バッファーは最大ボリュームで再生されます。この問題を解決するには、複製されたバッファーのボリュームを即座に、1 ミリベルでも異なる値に設定します。これによって、ボリュームの設定が、元の目的の値にすぐに戻ります。

要件

ヘッダー: DSound.h 宣言

ライブラリ: Dsound3d.dll 内容

関連項目

IDirectSound8