我已经有一段时间了。我正在使用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 Framework,并重新安装。我还做了一个系统还原到我回来的那么多点。我考虑过对整个系统进行核对,并开始新鲜,但如果可以,我想避免这种情况。
我也发现这个链接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()代码以我能够实际读取它的方式显示。
先谢谢你的帮助。
答案 0 :(得分:0)
我最近在阅读那本书时遇到了同样的问题,并且能够通过将错误记录到输出窗口来解决这个问题,请注意我在那里通过console.writeline。 在这之后我检查了输出窗口,它给了我错误代码519.看了一遍后我看到一些论坛帖子推荐我重新安装openAl来修复这个问题,这就是诀窍,我找到的所有链接都不起作用下载所以我不得不四处寻找,但softTonic在我的Windows 7机器上有一个适合我的那个http://openal.en.softonic.com/download
IntPtr data = Alut.alutLoadMemoryFromFile(路径,输出格式,输出尺寸,输出频率);
var error= Alut.alutGetError();
Console.WriteLine(error);
//System.Diagnostics.Debug.Assert(data != IntPtr.Zero);
希望这有帮助, helpdevelop