CreateMasteringVoice随机抛出HRESULT:0x88890017
CreateMasteringVoice randomly throws HRESULT: 0x88890017
m_audioEngine->CreateMasteringVoice(
&m_masteringVoice,
XAUDIO2_DEFAULT_CHANNELS,
sampleRate,
0,
NULL
)
);
m_audioEngine->CreateSourceVoice(
&implData->sourceVoice,
format,
0,
XAUDIO2_DEFAULT_FREQ_RATIO,
reinterpret_cast<IXAudio2VoiceCallback*>(&implData->callbackHander),
nullptr,
nullptr
)
);
当我戴上耳机时,上面的一个代码似乎总是运行良好。
如果我在没有耳机的情况下开始游戏,有时(并非总是)上述功能会失败它总是抛出相同的HRESULT:0x88890017
有什么想法吗?
如果我直接在这之后放一个断点,它似乎不会抛出错误。。。此任务是否异步运行?
编辑------------------------------
我的IXAudio2SourceVoice不断随机丢失
是什么导致它失去自我?
这就是我的程序崩溃的原因。。。
只有当耳机未插入时(创建XAudio2对象时)才会丢失
这是什么意思
此错误代码被称为"*AUDCLNT_E_CPUUSAGE_EXCEEDED*",当音频引擎处理音频数据包的时间过长时会出现此错误代码。这种情况通常发生在音频引擎的CPU使用量超过特定的侵入时。如果音频引擎的CPU使用率超过此阈值,它将无法创建新的流。
解决:用户
CPU的使用受到各种因素的影响,比如CPU的处理能力,比如你正在使用的频道数量,以及你在系统级别上启用的音频设备增强功能。一些可能的解决方案是确保有一个合适的CPU(检查最低系统要求规范),在应用程序/游戏设置中降低使用的频道数量,或者在操作系统中禁用一些系统级音频设备增强功能。对于后者,请检查任务管理器的CPU使用情况,如果其中一个可疑进程是"audiodg.exe",请进入"声音"控制面板,依次双击每个播放设备,进入"增强功能"选项卡,并选中"禁用所有增强功能"框。这将降低所需的CPU使用率,并解决您的问题。
解决:编码器
请记住,音频代码执行的操作越多,所需的CPU周期就越多。如果你有一个IXAudio2设备,它是由链中的大量效果处理器、1000个SubmixVoices和数百个SourceVoices创建的,那就像是在找麻烦。在你把手指指向CPU或系统级音频设备增强之前,一定要确保这不仅仅是你的代码效率低下。
您的大朋友是IXAudio2::GetPerformanceData,它将查询设备并为您填写XAUDIO2_PERFORMANCE_DATA结构。这将为您提供有关所使用的CPU周期的一些信息。很有可能你可以在这个错误真正发生之前拦截它。当你检测到大量CPU使用时,或者当错误实际发生时,这不一定是你的游戏/引擎/框架失败的原因。您可以重试。或者您可以调整SubmixVoices的数量。或者您可以选择不创建SourceVoice。或者,您可以暂时挂起音频/切换到空设备,并将所有这些通知用户。
您可以设置一个事件或回调来通知用户音频引擎中CPU的大量使用。这使应用程序能够通知用户CPU使用量过大,并通知用户降低设置中的通道数量(或者,您可以让应用程序自动调整)或关闭一些系统级音频设备增强功能。
- 如何在C++中使用 HRESULT 条件检查
- 如何初始化setMasterVolume的hresult
- HRESULT:将自定义代码与系统一个区分开
- 如何从 FAILED(HRESULT) 中抛出 std::system_error 异常?
- 无法加载dll libglorycolx2010.dll.该应用程序未能启动,因为其并排配置不正确.Hresult:0x
- 如何将Hresult转换为错误描述
- CreateMasteringVoice随机抛出HRESULT:0x88890017
- 在Direct2D应用程序中处理HRESULT
- 为什么 HRESULT 为 0 表示成功
- 找不到指定的过程.(HRESULT中出现异常:0x8007007F)
- 10 手机:"The specified module could not be found. (Exception from HRESULT: 0x8007007E)" :空
- 如何正确使用“出错时转到”不同的 HRESULT 值
- HResult 0x80040204 from IMediaObject::ProcessInput
- Default HRESULT hResult = E_NOTIMPL?
- 制作空C++项目:常规异常(来自 HRESULT:0x80131500 的例外)Visual Studio Commun
- 对COM组件的调用返回错误HRESULT E_FAIL
- 来自C++的WMI调用导致HRESULT=0x80041003
- HTTP状态代码到HRESULT的映射
- System.IO.FileNotFoundException未经处理消息=“找不到指定的模块.(HRESULT中的异常
- 无法加载DLL(找不到模块HRESULT:0x8007007E)