OpenAl和Alut用于制作声音管理器

时间:2013-10-19 20:34:35

标签: c# openal

我已经有一段时间了。我正在使用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()代码以我能够实际读取它的方式显示。

先谢谢你的帮助。

1 个答案:

答案 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