填充和播放静态缓冲区
向一个静态缓冲区载入数据是包含三个步骤:
1. 使用IDirectSoundBuffer8::Lock将整个缓冲区锁定。你指定缓冲区中你打算开始写的偏移位置(通常为0),并返回该点的内存地址。
2. 使用标准的内存拷贝程序将音频数据写入返回的地址中。
3. 使用IDirectSoundBuffer8::Unlock为缓冲区解锁。
下面的例子显示了这些步骤,其中lpdsbStatic是一个IDirectSoundBuffer8接口指针,pbData是一个数据源地址:
LPVOID lpvWrite;
DWORD dwLength;
if (DS_OK == lpdsbStatic-> Lock(
0, // Offset at which to start lock.
0, // Size of lock; ignored because of flag.
&lpvWrite, // Gets address of first part of lock.
&dwLength, // Gets size of first part of lock.
NULL, // Address of wraparound not needed.
NULL, // Size of wraparound not needed.
DSBLOCK_ENTIREBUFFER)) // Flag.
... {
memcpy(lpvWrite, pbData, dwLength);
lpdsbStatic->Unlock(
lpvWrite, // Address of lock start.
DWORD dwLength;
if (DS_OK == lpdsbStatic-> Lock(
0, // Offset at which to start lock.
0, // Size of lock; ignored because of flag.
&lpvWrite, // Gets address of first part of lock.
&dwLength, // Gets size of first part of lock.
NULL, // Address of wraparound not needed.
NULL, // Size of wraparound not needed.
DSBLOCK_ENTIREBUFFER)) // Flag.
... {
memcpy(lpvWrite, pbData, dwLength);
lpdsbStatic->Unlock(
lpvWrite, // Address of lock start.