2013-10-19 37 views
0

我一直在这个相当长的一段时间。我正在使用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()代码以便我可以实际读取它的内容。

感谢您提前给予帮助。

+0

你不应该断言指针检索错误代码之前是有效的?没有必要获取错误代码,并且如果指针是有效的,就会抛出错误,实际上这是不正确的。 – Aybe

回答

0

我最近遇到同样的问题,而通过该书,并能够通过记录错误输出窗口,通知我通过console.writeline在那里。 这样做后,我检查了输出窗口,它给了我错误代码519.在看完所有我看到一些论坛帖子推荐我重新安装openAl来解决这个问题做了伎俩,我发现的所有链接没有工作到下载,所以我不得不四处搜寻,但softTonic不得不为我工作在我的Windows的一个7机http://openal.en.softonic.com/download

IntPtr的数据= Alut.alutLoadMemoryFromFile(路径,输出格式,大小出来,输出频率);

 var error= Alut.alutGetError(); 
     Console.WriteLine(error); 

     //System.Diagnostics.Debug.Assert(data != IntPtr.Zero); 

希望这有助于 helpdevelop