我已经有一段时间了。我正在使用 C# 进行严肃游戏编程,并且正在编写本书第 9 章中的 SoundManager 代码,如果您需要准确的参考。该代码正在使用 OpenAl 设置声音管理器,我遇到了 Alut 界面的问题(如果这是正确的词的话)。这是我正在处理的代码:
public void LoadSound(string soundId, string path)
{
int buffer = -1;
Al.alGenBuffers(1, out buffer);
int errorCode = Al.alGetError();
System.Diagnostics.Debug.Assert(errorCode == Al.AL_NO_ERROR);
int format;
float frequency;
int size;
System.Diagnostics.Debug.Assert(File.Exists(path));
IntPtr data = Alut.alutLoadMemoryFromFile(path, out format, out size, out frequency);
int errorCode2 = Alut.alutGetError();
//string errorCodeString = Alut.alutGetErrorString(errorCode2);
//System.Diagnostics.Debug.Assert(errorCode2 != Alut.ALUT_ERROR_NO_ERROR);
//System.Diagnostics.Debug.Assert(data != IntPtr.Zero));
//System.Diagnostics.Debug.Write(errorCode2);
Al.alBufferData(buffer, format, data, size, (int)frequency);
_soundIdentifier.Add(soundId, new SoundSource(buffer, path));
}
问题就在这里:System.Diagnostics.Debug.Assert(data != IntPtr.Zero));。当这一行没有被注释掉时,它总是失败。我确实让它工作了,不知道我做了什么来改变它,它停止了工作。我已经在另一篇文章中发布了这个问题:在 OpenAL 中加载声音问题
我已经查看了所有内容,据我所知,问题在于 OpenAl 在我的系统上的工作方式。为此,我卸载了用于运行 OpenAl 的 Tao 框架,然后重新安装。我还进行了系统还原,恢复到尽可能多的点。我曾想过对我的整个系统进行核武器攻击,并重新开始,但如果可以的话,我想避免这种情况。
我还找到了这个链接http://distro.ibiblio.org/rootlinux/rootlinux-ports/more/freealut/freealut-1.1.0/doc/alut.html#ErrorHandling帮助我了解更多关于 Alut 的信息,但是无法从中获取 alut.dll,也无法显示任何错误。这段代码:
int errorCode2 = Alut.alutGetError();
//string errorCodeString = Alut.alutGetErrorString(errorCode2);
//System.Diagnostics.Debug.Assert(errorCode2 != Alut.ALUT_ERROR_NO_ERROR);
System.Diagnostics.Debug.Write(errorCode2);
我试图找出确切的错误。如果我编写如下代码:
int errorCode2 = Alut.alutGetError();
//string errorCodeString = Alut.alutGetErrorString(errorCode2);
System.Diagnostics.Debug.Assert(errorCode2 != Alut.ALUT_ERROR_NO_ERROR);
System.Diagnostics.Debug.Write(errorCode2);
我可能使用错误的代码来查找确切的错误,因为我仍在学习 c#。
这是我正在寻找的:
1)这是语法错误还是我的系统错误 2)如果这是我的系统错误,当我尝试卸载 OpenAL 以刷新所有文件时,是否有我没有删除的文件。3)如何让 alutGetError() 代码以我可以实际阅读的方式显示。
感谢您事先提供的任何帮助。