OpenAl и Alut для создания звукового менеджера

Я был в этом довольно долгое время. Я использую C# для серьезного программирования игр и работаю над кодом SoundManager, который можно найти в главе 9 книги, если вам нужна точная ссылка. Код настраивает звуковой менеджер с помощью 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 работает в моей системе. С этой целью я удалил Tao Framework, который я использую для запуска OpenAl, и переустановил. Я также сделал восстановление системы на столько точек, сколько у меня было. Я думал о том, чтобы уничтожить всю свою систему и начать все сначала, но хочу избежать этого, если смогу.

Я также нашел эту ссылку 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);

Я могу использовать код неправильно, чтобы найти точную ошибку, так как я все еще изучаю С#.

Вот что я ищу:

1) Это синтаксическая ошибка или ошибка моей системы 2) Если это ошибка моей системы, есть ли файлы, которые я не удаляю, когда пытаюсь удалить OpenAL, чтобы обновить все файлы. 3) Как мне заставить код alutGetError() отображаться таким образом, чтобы я действительно мог прочитать, что это такое.

Спасибо за любую помощь заранее.


person Maxwell Miller    schedule 19.10.2013    source источник
comment
Разве вы не должны утверждать, что указатель действителен перед получением кода ошибки? Нет необходимости получать код ошибки и бросать, если указатель действителен, на самом деле он неверен.   -  person aybe    schedule 20.10.2013


Ответы (1)


Недавно я столкнулся с той же проблемой, просматривая эту книгу, и смог понять ее, зарегистрировав ошибку в окне вывода, заметьте, я через 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

person helpdevelop    schedule 13.03.2014