Я был в этом довольно долгое время. Я использую 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() отображаться таким образом, чтобы я действительно мог прочитать, что это такое.
Спасибо за любую помощь заранее.