代码之家  ›  专栏  ›  技术社区  ›  gingerbreadboy

为什么DirectSound缓冲区不能在调试条件下播放?

  •  1
  • gingerbreadboy  · 技术社区  · 16 年前

    我的波形不能在调试状态下播放。如果我按ctrl+f5,我会得到一个很好的wav,控制台会写出文件光标的位置。( buf.PlayPosition )当声音结束后,该方法退出。在debug下(当我刚点击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 回复  |  直到 16 年前
        1
  •  2
  •   AShelly    16 年前

    也许您需要使用bufferDescription为缓冲区提供“全局焦点”。从C++ DOCS:

    “中的dsbcaps_globalfocus标志 示例确保缓冲区 即使在 应用程序窗口不在 前景。如果没有这个标志, 当另一个缓冲区 应用程序甚至对话框 输入焦点。”

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

        2
  •  0
  •   gingerbreadboy    16 年前

    我禁用了Visual Studio宿主进程,这似乎解决了问题。

    推荐文章