Platform SDK: DirectX

IDirectSoundCaptureBuffer::Lock

IDirectSoundCaptureBuffer::Lock メソッドは、バッファをロックする。バッファをロックすると、そのバッファへのポインタが返され、アプリケーションがそのメモリに対してオーディオ データを読み書きできるようになる。

HRESULT Lock(
  DWORD dwReadCursor,      
  DWORD dwReadBytes,       
  LPVOID *lplpvAudioPtr1,  
  LPDWORD lpdwAudioBytes1,  
  LPVOID *lplpvAudioPtr2,  
  LPDWORD lpdwAudioBytes2,  
  DWORD dwFlags            
);

パラメータ

dwReadCursor
バッファの先頭からロック開始位置までのオフセット。単位はバイト。
dwReadBytes
ロックされるバッファ部分のサイズ。単位はバイト。サウンド キャプチャ バッファは概念的には循環バッファである点に注意すること。
lplpvAudioPtr1
ロックされるサウンド キャプチャ バッファの最初のブロックを保持するポインタのアドレス。
lpdwAudioBytes1
lplpvAudioPtr1 パラメータが指すバイト数を保持する変数のアドレス。この値が、dwReadBytes パラメータより小さい場合、lplpvAudioPtr2 は 2 番目のデータ ブロックを指す。
lplpvAudioPtr2
ロックされるサウンド キャプチャ バッファの 2 番目のブロックを保持するポインタのアドレス。このパラメータの値が NULL の場合、lplpvAudioPtr1 パラメータはサウンド キャプチャ バッファのロックされた部分全体を指す。
lpdwAudioBytes2
lplpvAudioPtr2 パラメータが指すバイト数を保持する変数のアドレス。lplpvAudioPtr2 が NULL の場合、この値は 0 になる。
dwFlags
ロックイベントに変更を加えるフラグ。この値は NULL または次のフラグである。
DSCBLOCK_ENTIREBUFFER
dwReadBytes パラメータを無視し、キャプチャ バッファ全体をロックする。

戻り値

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

DSERR_INVALIDPARAM
DSERR_INVALIDCALL

注意

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

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

アプリケーションは、IDirectSoundCaptureBuffer::Lock メソッドが返したポインタからデータを読み込み、IDirectSoundCaptureBuffer::Unlock メソッドを呼び出し、バッファを解放して DirectSoundCapture に返すべきである。サウンド バッファは長時間にわたってロックすべきではない。長時間のロックを行うと、キャプチャ カーソルがロックされたバイトに達してしまい、機器構成に依存するオーディオの問題が発生することがある。

動作環境

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