Platform SDK: DirectX |
IDirectSoundBuffer::Lock メソッドは、サウンド バッファのオーディオ データに対する有効な書き込みポインタを取得する。
HRESULT Lock( DWORD dwWriteCursor, DWORD dwWriteBytes, LPVOID lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags );
成功すれば 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 を使用。
IDirectSoundBuffer、IDirectSoundBuffer::GetCurrentPosition、IDirectSoundBuffer::Unlock