【发布时间】:2013-10-28 13:09:39
【问题描述】:
我在这方面已经有一段时间了。我正在使用 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));。当这一行没有被注释掉时,它总是失败。我确实让它工作了,不知道我做了什么来改变它,它停止了工作。我已经在另一个帖子上发布了这个:Load sound problem in 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() 代码以我可以实际阅读的方式显示。
感谢您事先提供的任何帮助。
【问题讨论】:
-
你不应该在检索错误代码之前断言指针是有效的吗?如果指针有效,则无需获取错误代码并抛出,实际上是不正确的。