windows - IDirectSound8::CreateSoundBuffer 返回 DSERR_BUFFERLOST
问题描述
返回 DSERR_BUFFERLOST 的 IDirectSound8::CreateSoundBuffer 是什么意思?
根据文档DSERR_BUFFERLOST 不是来自 CreateSoundBuffer 的有效返回码。
我们的两个用户报告了 CreateSoundBuffer 返回 DSERR_BUFFERLOST(数百个)的错误。我们已将带有此代码的产品交付给数千名用户,而没有报告任何问题。两位用户都报告说拥有最新的声音驱动程序。一个报告有一台 Alienware 17 R4 笔记本电脑,另一个是 MSI 笔记本电脑。
Windows-10 上的一位用户报告说,使用 Windows-8 兼容模式修复了此问题。
其他互联网参考资料包括此链接。一位用户尝试重新启动他们的 Windows 音频服务,但没有任何效果。此链接似乎描述了另一个游戏中的相同问题。
这是该调用的其余设置:
WAVEFORMATEX w = {};
w.wFormatTag = WAVE_FORMAT_PCM;
w.nSamplesPerSec = pSoundData->sampleRate;
w.wBitsPerSample = (WORD)pSoundData->bitsPerSample;
w.nChannels = (WORD)pSoundData->numChannels;
w.nBlockAlign = w.nChannels * w.wBitsPerSample / 8;
w.nAvgBytesPerSec = w.nSamplesPerSec * w.nBlockAlign;
w.cbSize = 0;
int bufferSize = pSoundData->decodedSize;
int bufferFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_GLOBALFOCUS;
DSBUFFERDESC bufferDesc = { sizeof(DSBUFFERDESC), (DWORD)bufferFlags, (DWORD)bufferSize, 0, &w, DS3DALG_DEFAULT };
LPDIRECTSOUNDBUFFER pBuffer;
HRESULT hr = pSoundInterface->mDevice->CreateSoundBuffer(&bufferDesc, &pBuffer, NULL);
解决方案
DirectSound 文档已经很久没有被编辑过了,但我可以告诉你,这DSERR_BUFFERLOST
是来自多种方法的有效错误:GetCurrentPosition
、Play
、Stop
、Lock
、Unlock
和Restore
.
自 Windows Vista 以来所有版本的 Windows 上的 DirectSound 根本不是“直接”的。它使用 Windows Core Audio (WASAPI) 来输出。您获得 a 的主要原因DSERR_BUFFERLOST
是每当您从 WASAPI 获得“严重错误”时。通常,这仅在您丢失当前播放设备时才会发生,但它在内部处理以切换设备,因此这里不应该出现这种情况。
如果您能够重现此问题,您可以尝试启用 DirectSound ETW 事件以查找此处发生的错误代码。
8a93b54b-c75a-49b5-a5be-9060715b1a33 Microsoft-Windows-DirectSound
ae4bd3be-f36f-45b6-8d21-bdd6fb832853 Microsoft-Windows-Audio
否则,它可能是驱动程序或硬件错误。
推荐阅读
- javascript - 填充数组数组
- javascript - 使一个 div 在另一个 div 的全屏上可见
- python - Python 在 docker 映像中创建文件夹,但在处理完成时删除
- javascript - 无法从 Promise、上下文 api(反应钩子)读取未定义的属性“代码”
- c++ - Dynamic_cast 给出分段错误
- winapi - 使用 MultiByteToWideChar 从多字节字符串转换的宽字符串打印并写入文件错误
- python - 无法从函数中导入 selenium webdriver
- ios - 如何使用本机反应在我的firestore上的文档上添加多个对象?
- python - 如何修复“ModuleNotFoundError:没有名为 'azure.storage'\r 的模块”
- javascript - 如何在javascript文件的折叠代码中显示结束标记