Microsoft DirectX 8.0 (C++)

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 で宣言。

参照

IDirectSoundBuffer8::GetCurrentPosition