Windows IDirectSound8::CreateSoundBuffer返回DSERR_BUFFERLOST

Windows IDirectSound8::CreateSoundBuffer返回DSERR_BUFFERLOST,windows,audio,directx,wav,directsound,Windows,Audio,Directx,Wav,Directsound,IDirectSound8::CreateSoundBuffer返回DSERR_BUFFERLOST意味着什么 根据DSERR_BUFFERLOST,它不是CreateSoundBuffer的有效返回代码 我们的两个用户报告了CreateSoundBuffer返回DSERR_BUFFERLOST(共数百个)的错误。我们已经向数千名用户发送了带有此代码的产品,但没有报告任何问题。两个用户都报告拥有最新的声音驱动程序。一个报告拥有Alienware 17 R4笔记本电脑,另一个报告拥有MSI笔记本电

IDirectSound8::CreateSoundBuffer返回DSERR_BUFFERLOST意味着什么

根据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\u BUFFERLOST
是一个有效的错误,它有很多方法:
GetCurrentPosition
Play
停止
锁定
解锁
,以及
恢复

所有版本的Windows上都有DirectSound,因为Windows Vista根本不“直接”。它使用Windows核心音频(WASAPI)进行输出。获得
DSERR\u BUFFERLOST
的主要原因是每当从WASAPI获得“严重错误”时。通常情况下,只有在丢失当前播放设备时才会发生这种情况,但它是通过内部处理来切换设备的,因此这里不应该出现这种情况

如果您能够重新处理此问题,可以尝试启用DirectSound ETW事件以查找此处发生的错误代码

8a93b54b-c75a-49b5-a5be-9060715b1a33    Microsoft-Windows-DirectSound
ae4bd3be-f36f-45b6-8d21-bdd6fb832853    Microsoft-Windows-Audio

否则,它可能是一个驱动程序或硬件错误。

DirectSound文档已经很久没有被编辑过了,但是我可以告诉你,
DSERR\u BUFFERLOST
是一个有效的错误,有很多方法:
GetCurrentPosition
play
Stop
Lock
Unlock
,和
恢复

所有版本的Windows上都有DirectSound,因为Windows Vista根本不“直接”。它使用Windows核心音频(WASAPI)进行输出。获得
DSERR\u BUFFERLOST
的主要原因是每当从WASAPI获得“严重错误”时。通常情况下,只有在丢失当前播放设备时才会发生这种情况,但它是通过内部处理来切换设备的,因此这里不应该出现这种情况

如果您能够重新处理此问题,可以尝试启用DirectSound ETW事件以查找此处发生的错误代码

8a93b54b-c75a-49b5-a5be-9060715b1a33    Microsoft-Windows-DirectSound
ae4bd3be-f36f-45b6-8d21-bdd6fb832853    Microsoft-Windows-Audio

否则,可能是驱动程序或硬件缺陷造成的。

复制过程中是否涉及特定版本的操作系统?DirectSound多年来一直是传统产品,很多都是由现代版本的Windows模拟的,因此了解操作系统的版本很重要。笔记本电脑足够现代,如果不是Windows 10,我会感到惊讶,但我已经要求他们确定。注意:此代码在其他Windows 10计算机上成功运行。复制过程中是否涉及特定版本的操作系统?DirectSound多年来一直是传统产品,很多都是由现代版本的Windows模拟的,因此了解操作系统的版本很重要。笔记本电脑足够现代,如果不是Windows 10,我会感到惊讶,但我已经要求他们确定。注意:此代码在其他Windows 10计算机上成功运行。