XAudio2集成3D音频触发错误码88960001问题求助
错误码0x88960001对应XAudio2的XAUDIO2_E_INVALID_CALL错误,说明调用接口时传入了非法参数,问题出自代码的以下几处:
- 3D计算标志和参数不匹配
你调用X3DAudioCalculate时指定了X3DAUDIO_CALCULATE_LPF_DIRECT和X3DAUDIO_CALCULATE_REVERB两个标志,但没有为DSPSettings结构体的对应成员分配内存、初始化数值,导致计算得到的参数无效,后续调用音频控制接口时触发错误。如果当前不需要用到低通滤波和混响效果,直接删掉这两个标志,仅保留X3DAUDIO_CALCULATE_MATRIX | X3DAUDIO_CALCULATE_DOPPLER即可。 - 发射器参数配置错误
你将Emitter.CurveDistanceScaler设为了FLT_MIN,这个极小值会导致距离衰减、多普勒效应的计算结果异常,甚至超出XAudio2接口允许的参数范围。这个参数的默认有效值应设置为1.0f。 - 缺少文件操作合法性判断
代码没有判断CreateFile的返回值,如果wav文件不存在、路径填写错误,后续读取音频块的操作会拿到错误的格式数据,创建源声音时也会触发非法调用错误。如果你的项目使用Unicode编码,不要直接将字符串强转为LPCSTR,可以改用CreateFileA接口,或者把路径改为宽字符格式L"woodBreak.wav"。
修改完成后即可正常实现3D空间音频效果。
内容的提问来源于stack exchange,提问作者VoidRune
相关产品推荐
相关产品推荐

