2012-04-27 6 views
2

SlimDX에서 XAudio2를 사용하고 있는데 루프에서 짧은 (~ 8 초) wav 파일을 재생할 수 있었지만 첫 루프가 끝날 때까지 오디오가 시작됩니다. 말더듬과 말더듬은 다음 루프로 이어지고 시간이 갈수록 악화되고 악화됩니다. XAudio2 OnVoiceProcessingPassStart 콜백 끊김 재생

나는 디버그 프로필 켜져 있고 출력 창에 나는 이러한 오류를 얻을 :

XAUDIO2: WARNING: Spent 5.63ms in the OnVoiceProcessingPassStart callback 
XAUDIO2: WARNING: Spent 5.60ms in the OnVoiceProcessingPassStart callback 
XAUDIO2: WARNING: Spent 5.59ms in the OnVoiceProcessingPassStart callback 
XAUDIO2: WARNING: Spent 5.69ms in the OnVoiceProcessingPassStart callback 

을 그리고 이러한 말더듬가 발생했을 때와 일치한다. 나는이 콜백에서 아무 것도하지 않고있다. (나는 이벤트에 아무 것도 추가하지 않았다.) 그리고 느려지고있다. 데이터 스트림 버퍼를 보유하기위한

웨이브 클래스 : 나는 참조 아래에있는 내 코드를 추가 한

public class Wave 
    { 
     public WaveStream Data { get; private set; } 

     public AudioBuffer Buffer { get; private set; } 

     public Wave(string path, bool repeating) 
     { 
      Data = new WaveStream(path); 
      Buffer = new AudioBuffer(); 
      Buffer.AudioBytes = (int)Data.Length; 
      Buffer.AudioData = Data; 
      if (repeating) 
      { 
       Buffer.Flags = BufferFlags.EndOfStream; 
      } 
      else 
      { 
       Buffer.Flags = BufferFlags.None; 
      } 
      Buffer.PlayBegin = 0; 
      Buffer.PlayLength = 0; 
      Buffer.LoopBegin = 0; 
      Buffer.LoopCount = 100; 
      Buffer.LoopLength = 0; 
     } 
    } 
에는 XAudio 엔진과 목소리를 유지하고/제거 목소리를 추가 다루에 대한

Sound 클래스 :

public class Sound 
    { 
     private XAudio2 audio; 
     private MasteringVoice master; 
     private List<SourceVoice> sources; 

     public Sound() 
     { 
      audio = new XAudio2(XAudio2Flags.DebugEngine, ProcessorSpecifier.AnyProcessor); 
      master = new MasteringVoice(audio); 
      sources = new List<SourceVoice>(); 
     } 

     public void AddSound(Wave wave) 
     { 
      SlimDX.Multimedia.WaveFormat format = wave.Data.Format; 
      SourceVoice source = new SourceVoice(audio, format); 
      source.Start(); 
      source.SubmitSourceBuffer(wave.Buffer); 
      sources.Add(source); 
     } 
    } 

그리고 그것을 실행하기 위해, 내가 사용

Wave wave = new Wave("Music2/untitled.wav", true); 
      Sound sound = new Sound(); 
      sound.AddSound(wave); 

답변

0

오히려 쩔쩔 매게이 하나의 내 잘못이야. D3D 버퍼를 재 작성하고 동적 버퍼로 변경하는 것을 잊어 버린 모든 프레임을 삭제했습니다. 이로 인해 내 메모리 사용량이 몇 기가 바이트로 급증하여 음악을 할당하기에 충분하지 않은 것으로 나타났습니다.

일단 메모리 누수를 제거하면 음악 소리가 잘 들립니다.

비록 XAudio2 예외가 매우 잘 표현되어 있는지 확실하지 않습니다 ...