填充和播放静态缓冲区
向一个静态缓冲区载入数据是包含三个步骤:
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, //

这篇博客详细介绍了DirectSound中缓冲区的操作,包括填充和播放静态缓冲区的步骤,以及如何处理流缓冲区。在静态缓冲区中,通过Lock、Write和Unlock实现数据加载和播放。而在流缓冲区中,需要不断更新数据并判断缓冲区是否准备好接收新数据。此外,还讨论了如何确保数据正确播放和避免在播放指针和写指针之间写入数据的问题。
最低0.47元/天 解锁文章
4339

被折叠的 条评论
为什么被折叠?



