Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAudio2 OnVoiceProcessingPassStart回调断断续续播放_C#_Audio_Callback_Slimdx_Xaudio2 - Fatal编程技术网

C# XAudio2 OnVoiceProcessingPassStart回调断断续续播放

C# XAudio2 OnVoiceProcessingPassStart回调断断续续播放,c#,audio,callback,slimdx,xaudio2,C#,Audio,Callback,Slimdx,Xaudio2,我将XAudio2与SlimDX一起使用,我已经设法让它在循环中播放一个短的(约8秒)wav文件,但是当它接近第一个循环的末尾时,音频开始结巴,结巴继续进入下一个循环,随着时间的推移越来越严重 我打开了调试配置文件,在输出窗口中出现以下错误: XAUDIO2: WARNING: Spent 5.63ms in the OnVoiceProcessingPassStart callback XAUDIO2: WARNING: Spent 5.60ms in the OnVoiceProcessin

我将XAudio2与SlimDX一起使用,我已经设法让它在循环中播放一个短的(约8秒)wav文件,但是当它接近第一个循环的末尾时,音频开始结巴,结巴继续进入下一个循环,随着时间的推移越来越严重

我打开了调试配置文件,在输出窗口中出现以下错误:

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
这些都与口吃发生的时间相吻合。在这些回调中,我什么也没做(我甚至没有向事件中添加任何内容),但它正在放缓。我在下面添加了代码以供参考:

用于保存数据流和缓冲区的Wave类:

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引擎和声音,并涵盖添加/删除声音:

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);
        }
    }

令人尴尬的是,这是我自己的错。我重新创建了一个D3D缓冲区,并销毁了我忘记更改为动态缓冲区的每一帧。这导致我的内存使用量激增到了几GB,这意味着可能没有足够的内存分配给音乐

一旦我消除了内存泄漏,音乐听起来很好


我不确定XAudio2例外是否用词很好,但是…

很尴尬,这是我自己的错。我重新创建了一个D3D缓冲区,并销毁了我忘记更改为动态缓冲区的每一帧。这导致我的内存使用量激增到了几GB,这意味着可能没有足够的内存分配给音乐

一旦我消除了内存泄漏,音乐听起来很好

我不确定XAudio2例外是否用词很好

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