0

我已经有一段时间了。我正在使用 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));。当这一行没有被注释掉时,它总是失败。我确实让它工作了,不知道我做了什么来改变它,它停止了工作。我已经在另一篇文章中发布了这个问题:在 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() 代码以我可以实际阅读的方式显示。

感谢您事先提供的任何帮助。

4

1 回答 1

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);

希望这会有所帮助,帮助发展

于 2014-03-13T07:18:56.783 回答