Platform SDK: DirectX

IDirectSoundBuffer::Lock

IDirectSoundBuffer::Lock メソッドは、サウンド バッファのオーディオ データに対する有効な書き込みポインタを取得する。

HRESULT Lock(
  DWORD dwWriteCursor,    
  DWORD dwWriteBytes,     
  LPVOID lplpvAudioPtr1,  
  LPDWORD lpdwAudioBytes1,  
  LPVOID lplpvAudioPtr2,  
  LPDWORD lpdwAudioBytes2,  
  DWORD dwFlags           
);

パラメータ

dwWriteCursor
バッファの先頭からロック開始位置までのオフセット。単位はバイト。dwFlags パラメータで DSBLOCK_FROMWRITECURSOR フラグが指定されている場合は、このパラメータは無視される。
dwWriteBytes
ロックされるバッファ部分のサイズ。単位はバイト。サウンド バッファは概念的には循環バッファである点に注意すること。
lplpvAudioPtr1
ロックされるサウンド バッファの最初のブロックを保持するポインタのアドレス。
lpdwAudioBytes1
lplpvAudioPtr1 パラメータが指すバイト数を保持する変数のアドレス。この値が dwWriteBytes パラメータより小さい場合、lplpvAudioPtr2 はサウンド データの 2 番目のブロックを指す。
lplpvAudioPtr2
ロックされるサウンド バッファの 2 番目のブロックを保持するポインタのアドレス。このパラメータの値が NULL の場合、lplpvAudioPtr1 パラメータはサウンド バッファのロックされた部分全体を指す。
lpdwAudioBytes2
lplpvAudioPtr2 パラメータが指すバイト数を保持する変数のアドレス。lplpvAudioPtr2 が NULL の場合、この値は 0 になる。
dwFlags
ロックイベントに変更を加えるフラグ。以下のフラグが定義されている。
DSBLOCK_FROMWRITECURSOR
カレント ライト ポジションからロックを行う。この結果、IDirectSoundBuffer::GetCurrentPosition の呼び出しが不要になる。このフラグを指定すると dwWriteCursor パラメータは無視される。
DSBLOCK_ENTIREBUFFER
バッファ全体をロックする。dwWriteBytes パラメータは無視される。

戻り値

成功すれば DS_OK、失敗すれば次のエラー値のいずれかを返す。

DSERR_BUFFERLOST
DSERR_INVALIDCALL
DSERR_INVALIDPARAM
DSERR_PRIOLEVELNEEDED

注意

このメソッドはオフセットとバイト カウントを受け取り、2 つの書き込みポインタとそれぞれに関連するサイズを返す。サウンド バッファが循環するため、2 つのポインタが必要である。ロックされたバイトがバッファの最後からラップ アラウンドしない (先頭へ戻らない) 場合、2 番目のポインタである lplpvAudioBytes2 は NULL になる。ただし、バイトがラップ アラウンドする場合は、2 番目のポインタはバッファの先頭を指す。

アプリケーションが lplpvAudioPtr2 lpdwAudioBytes2 の各パラメータに NULL を渡すと、DirectSound はバッファのラップアラウンド部分をロックしない。

アプリケーションは、IDirectSoundBuffer::Lock メソッドが返したポインタにデータを書き込み、IDirectSoundBuffer::Unlock メソッドを呼び出し、バッファを解放して DirectSound へ返すべきである。サウンド バッファは長時間にわたってロックすべきではない。長時間のロックを行うと、再生カーソルがロックされた部分に達してしまい、機器構成に依存するランダム ノイズなどのオーディオの問題が発生することがある。

警告:このメソッドは、書き込みポインタのみを返す。アプリケーションは、そのポインタを使ったサウンド データの読み込みを行うべきではない。DirectSoundBuffer オブジェクトが有効なサウンド データを保持している場合でも、そのデータが有効でない可能性がある。たとえば、バッファがオンボード メモリに配置されている場合、そのポインタはメイン システム メモリ内の一時バッファのアドレスとなっていることも考えられる。IDirectSoundBuffer::Unlock を呼び出すと、この一時バッファはオンボード メモリに転送される。

動作環境

  Windows NT/2000 : Service Pack 3 を適用した Windows NT バージョン 4.0 以降が必要。
  Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
  ヘッダー : dsound.h で宣言。
  インポート ライブラリ : dsound.lib を使用。

参照

IDirectSoundBufferIDirectSoundBuffer::GetCurrentPositionIDirectSoundBuffer::Unlock