私は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);