2013-10-19 5 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 Framework를 제거하고 다시 설치했습니다. 나는 또한 내가 가지고있는만큼 시스템을 복원했다. 내 전체 시스템을 nuking에 대해 생각하고 신선한 시작,하지만 할 수 있으면 이것을 피하고 싶습니다.

나는이 링크 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#을 배우고으로 모든 잘못은, 정확한 오류를 찾을 코드를 사용하고있을 수 있습니다. 여기

내가 무엇을 찾고있다 :이 구문 오류 또는 내 시스템에 오류가있는 경우 내 시스템 2)에 오류가)

1, I 때 제거하지 오전이 파일입니다 모든 파일을 새로 고치려면 OpenAL을 제거하려고합니다. 3) 어떻게 실제로 읽을 수있는 방식으로 alutGetError() 코드를 표시 할 수 있습니까?

미리 도움을 주셔서 감사합니다.

나는 최근에 그 책을 진행하는 과정에서 동일한 문제로 실행하고 출력 창에 오류를 기록하여 알아낼 수 있었다
+0

당신이 포인터가 오류 코드를 검색하기 전에 유효 함을 주장하지 않겠 helpdevelop? 오류 코드를 가져올 필요가 없습니다. 포인터가 유효하다면 던져 넣으십시오. 실제로는 올바르지 않습니다. – Aybe

답변

0

는, 거기에 console.writeline을 통해 I를 확인할 수 있습니다. 그런 다음 오류 코드 519를 주었던 출력 창을 확인했습니다. 전체를 살펴본 후 몇 가지 포럼 게시물을 통해 openAl을 다시 설치하여 트릭을 수행 한이 문제를 해결할 것을 알았습니다. 다운로드 작업을해야했기 때문에 사냥을해야했지만 소프트 토닉은 내 윈도우 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); 

희망,