次の方法で共有


IDirectSoundBuffer8::Lock

バッファの全部または一部をデータ書き込み用に準備し、データを書き込むことのできるポインタを返す。

構文

  HRESULT Lock(
  DWORD
   dwOffset
  , 
  DWORD
   dwBytes
  , 
  LPVOID
   * ppvAudioPtr1
  , 
  LPDWORD
   pdwAudioBytes1
  , 
  LPVOID
   * ppvAudioPtr2
  , 
  LPDWORD
   pdwAudioBytes2
  , 
  DWORD
   dwFlags 

  );

パラメータ

dwOffset

バッファの先頭からロック開始位置までのオフセット (バイト単位)。dwFlags パラメータで DSBLOCK_FROMWRITECURSOR フラグが指定されている場合は、このパラメータは無視される。

dwBytes

ロックするバッファ部分のサイズ (バイト単位)。バッファは概念的には循環バッファであるため、この数は dwOffset からバッファの最後までの間のバイト数を上回ることができる。

ppvAudioPtr1

バッファの最初にロックされた部分へのポインタを受け取る変数のアドレス。

pdwAudioBytes1

ppvAudioPtr1 のブロックのバイト数を受け取る変数のアドレス。この値が dwBytes より小さい場合、ロックはラップされ、ppvAudioPtr2 はバッファの先頭にある第 2 のデータ ブロックを指す。

ppvAudioPtr2

キャプチャ バッファの 2 番目にロックされた部分へのポインタを受け取る変数のアドレス。NULL が返された場合、ppvAudioPtr1 パラメータはキャプチャ バッファのロックされた部分全体を指す。

pdwAudioBytes2

ppvAudioPtr2 のブロックのバイト数を受け取る変数のアドレス。ppvAudioPtr2 が NULL の場合、値は 0 である。

dwFlags

ロック イベントを変更するフラグ。次のフラグが定義されている。

説明
DSBLOCK_FROMWRITECURSOR 書き込みカーソルの位置でロックを開始する。dwOffset パラメータは無視される。
DSBLOCK_ENTIREBUFFER バッファ全体をロックする。dwBytes パラメータは無視される。

戻り値

成功した場合は DS_OK を返す。

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

リターン コード
DSERR_BUFFERLOST
DSERR_INVALIDCALL
DSERR_INVALIDPARAM
DSERR_PRIOLEVELNEEDED

注意

このメソッドはオフセットとバイト カウントを受け取り、2 つの書き込みポインタとそれぞれに関連するサイズを返す。ロックされる部分がバッファの最後まで及ばず、バッファの先頭にラップしない場合、2 番目のポインタである ppvAudioBytes2 は NULL を受け取る。ロックがラップされる場合、ppvAudioBytes2 はバッファの先頭を指す。

アプリケーションが ppvAudioPtr2 パラメータと pdwAudioBytes2 パラメータに NULL を渡すと、ロックがバッファの終端を越えることはなく、ロックはラップされない。

アプリケーションは、このメソッドで返されたポインタにデータを書き込んだ後、直ちに IDirectSoundBuffer8::Unlock を呼び出して、データ再生の用意ができたことを DirectSound に通知する必要がある。この通知を行わないと、サウンド デバイスの構成によっては、オーディオの分断または無音状態が発生する場合がある。

このメソッドは、書き込みポインタのみを返す。データが有効でない場合があるため、アプリケーションでこのポインタからサウンド データを読み込んではならない。たとえば、バッファがカードのメモリに配置されている場合、ポインタはシステム メモリ内の一時バッファのアドレスとなる可能性がある。IDirectSoundBuffer8::Unlock を呼び出すと、この一時バッファの内容はカードのメモリに転送される。

要件

**  ヘッダー:**dsound.h で宣言。

参照