为什么DirectSound Buffer不会在调试条件下播放?

时间:2010-01-25 20:21:10

标签: c# debugging audio directsound

我的wave不会在调试下播放。如果我按下CTRL + F5,我会获得一个不错的WAV,并且控制台会写出文件光标位置(buf.PlayPosition),然后当声音结束时该方法退出。在调试下(当我刚刚按F5时)没有音频输出,但是在控制台窗口中文件光标位置仍然增加,并且该方法毫无例外地退出。

using Microsoft.DirectX.DirectSound;

public void Play()
    {
        var fileName = "bass.wav";
        using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {       
            using (var dev = new Device())
            {
                dev.SetCooperativeLevel(this, CooperativeLevel.Priority);
                using (Buffer buf = new Buffer(stream, dev))
                {
                    buf.Volume = 0;
                    buf.Play(0, BufferPlayFlags.Default);
                    while (buf.Status.Playing)
                    {
                        System.Console.WriteLine("playing " + buf.PlayPosition);
                    }
                }
            }
        }
    }

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

也许你需要使用BufferDescription给缓冲区“Global Focus”。来自C ++文档:

  

“中的DSBCAPS_GLOBALFOCUS标志   示例确保缓冲区将   即使是在继续玩的时候   应用程序窗口不在   前景。没有这面旗帜,   另一个缓冲区将被静音   应用程序甚至是对话框都有   输入焦点。“

尝试使用构造函数的public SecondaryBuffer(Stream, BufferDescription, Device); 形式。

答案 1 :(得分:0)

我禁用了Visual Studio Hosting Process,这似乎解决了这个问题。