次の方法で共有


IDirectSoundBuffer8::Lock

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 を渡すと、ロックはバッファーの最後を越えることはなく、ラップされません。

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

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

要件

ヘッダー: DSound.h 宣言

ライブラリ: Dsound3d.dll 内容

関連項目

IDirectSoundBuffer8