2012-04-27 53 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

むしろあきれるほど、この1の私自身の責任。私はD3Dバッファを再作成して、ダイナミックバッファに変更するのを忘れてしまったすべてのフレームを破棄しました。これは、私のメモリ使用量が数ギガバイトの大きさに吹き飛ばされていたため、おそらく音楽のために割り当てるには十分ではなかったのです。

一度メモリリークを取り除くと、音楽はうまく聞こえました。

XAudio2の例外が非常によく覚えているかどうかわかりません。

関連する問題