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 内容