我一直在这个相当长的一段时间。我正在使用C#进行严肃游戏编程,并且正在研究本书第9章中找到的SoundManager代码,如果您需要确切的参考资料。该代码使用OpenAl设置了一个健全的管理器,并且我在Alut界面中遇到了问题(如果这是正确的话)。下面是我对工作的代码: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(!数据= 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()代码以便我可以实际读取它的内容。
感谢您提前给予帮助。
你不应该断言指针检索错误代码之前是有效的?没有必要获取错误代码,并且如果指针是有效的,就会抛出错误,实际上这是不正确的。 – Aybe