Почему DirectSound Buffer не воспроизводится в условиях отладки? - PullRequest
1 голос
/ 25 января 2010

Моя волна не будет воспроизводиться при отладке. Если я нажимаю 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 ]

2 голосов
/ 26 января 2010

Может быть, вам нужно дать буфер "Global Focus", используя BufferDescription. Из документов C ++:

"Флаг DSBCAPS_GLOBALFOCUS в пример гарантирует, что буфер будет продолжать играть, даже когда Окно приложения не находится в на переднем плане. Без этого флага буфер будет отключен, когда другой приложение или даже диалоговое окно имеет фокус ввода. "

Попробуйте использовать public SecondaryBuffer (Stream, BufferDescription, Device); форма конструктора.

0 голосов
/ 27 января 2010

Я отключил процесс размещения Visual Studio, и это, похоже, решило проблему.

...