2012-12-12 8 views
0

Microsoft.Xna.Framework를 사용하여 wav 파일을 재생하려고하는데이 오류를 해결할 수 없습니다. 다음은 Microsoft.Xna.Framework.ni.dll에서 'System.ArgumentException'유형의 예외가 발생했습니다.

A first chance exception of type 'System.ArgumentException' occurred in Microsoft.Xna.Framework.ni.dll 
An exception of type 'System.ArgumentException' occurred in Microsoft.Xna.Framework.ni.dll but was not handled in user code 

내 코드입니다 : (오류 라인에서 발생 : TitleContainer.OpenStream(dingSoundFile))는 인수 예외가 발생합니다 같은

 SoundEffectInstance seiCircus; 
     string dingSoundFile = "/Html/sounds/tap.wav"; 
     using (var stream = TitleContainer.OpenStream(dingSoundFile)) 
     { 
      var effect = SoundEffect.FromStream(stream); 
      //create the instance 
      seiCircus = effect.CreateInstance(); 

      FrameworkDispatcher.Update(); 
      //play sound via the instance 
      seiCircus.Play(); 
     } 
+1

어떤 라인이 예외가 발생? 내부 예외가 있습니까? 전체 스택 추적을 게시하십시오. 사운드 파일이 올바르게로드되고 있습니까? SoundEffect는 PCM 오디오 8 또는 16 비트, 8KHz ~ 48KHz, 모노 또는 스테레오 만 처리 할 수 ​​있습니다. wav 파일이 호환 가능합니까 (http://blogs.msdn.com/b/ashtat/archive/2010/06/03/soundeffect-creation-in-xna-game-studio-4.aspx)? – Ani

+0

첫 번째 기회 예외이기 때문에 전체 스택 추적입니다. 문제는 내 wav가 PCM이 아닐 수도 있다는 것입니다. 테스트 할 예제 PCM 오디오 파일을 어디에서 찾을 수 있습니까? – joe

+0

XNA 샘플 (http://xbox.create.msdn.com/en-US/education/tutorial/2dgame/getting_started)? – Ani

답변

0

가 SoundEffect.FromStream 방법에 대한 documentation에 따르면,이 보이는 경우 스트림 매개 변수가 null입니다. 내 권장 사항은 통합 테스트를 작성하거나 문제를 해결하기 위해 방어 코드를 작성하는 것입니다.

통합 테스트 :

[Test] 
public void Test() { 
    string dingSoundFile = "Html/sounds/tap.wav"; //NOTE: Remove leading slash 
    try { 
     var stream = TitleContainer.OpenStream(dingSoundFile); 
     Assert.IsNotNull(stream); 
    } catch (Exception ex) { 
     Assert.Fail(ex.Message); 
    } 
} 

또는

방어 코딩 :

SoundEffectInstance seiCircus; 
string dingSoundFile = "Html/sounds/tap.wav"; //NOTE: Remove leading slash 
try { 
    using (var stream = TitleContainer.OpenStream(dingSoundFile)) { 
     if(stream != null) { 
      var effect = SoundEffect.FromStream(stream); 
      seiCircus = effect.CreateInstance(); 

      FrameworkDispatcher.Update(); 
      seiCircus.Play(); 
     } 
    } 
} catch (Exception ex) { 
     Debug.WriteLine(ex.Message); 
} 
+0

Thanks, titleContainer.OpenStream (dingSoundFile) 줄에 오류가 발생하므로 stream! = null에 도달하지 않습니다. – joe

+0

소리 파일의 경로가 발견되지 않거나 존재하지 않는다는 문제가있는 것처럼 보입니다. using 문을 try/catch 할 수 있습니다. – Flea

+0

이 스레드는 사운드 파일의 상대 경로에 액세스하는 데 비슷한 문제가 있음을 나타냅니다. (http://xboxforums.create.msdn.com/forums/p/51049/308573.aspx). try/catch는 오류를 좁히는 데 도움이 될 것이라고 생각합니다 (적어도 디버깅을 위해서는). 또한 슬래시로 시작하는 것이 더 이상 작동하지 않음을 나타냅니다. 경로에서 제거하려고 할 수 있습니다. – Flea

관련 문제