2

我的波不会在调试下播放。如果我按 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);
                    }
                }
            }
        }
    }

有任何想法吗?

4

2 回答 2

3

也许您需要使用 BufferDescription 为缓冲区提供“全局焦点”。来自 C++ 文档:

“示例中的 DSBCAPS_GLOBALFOCUS 标志确保即使应用程序窗口不在前台时缓冲区也将继续播放。没有此标志,当另一个应用程序甚至对话框具有输入焦点时,缓冲区将被静音。”

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

于 2010-01-26T01:55:18.850 回答
0

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

于 2010-01-26T21:45:05.847 回答