2010-01-25 15 views
1

我的wave不會在調試下播放。如果我按CTRL + F5,我會得到一個很好的WAV,控制檯寫出文件光標位置(buf.PlayPosition),然後在聲音結束時退出該方法。在調試下(當我剛剛點擊F5時),沒有音頻輸出,但是在控制檯窗口中文件光標位置仍然增加,並且該方法毫無例外地退出。爲什麼DirectSound緩衝區在調試條件下無法播放?

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

任何想法?

回答

0

我禁用了Visual Studio宿主進程,這似乎解決了問題。

2

也許你需要使用BufferDescription來給緩衝區「Global Focus」。從C++文檔:

「的 例子中的DSBCAPS_GLOBALFOCUS標誌確保緩衝區將 繼續播放,即使 應用程序窗口是不是在 前景如果沒有此標誌, 緩衝區將靜音。當另一個 應用程序或甚至一個對話框有 輸入焦點。「

嘗試使用構造函數的public SecondaryBuffer(Stream, BufferDescription, Device);形式。

+0

使用SecondaryBuffer比使用Buffer有什麼好處? – gingerbreadboy 2010-01-26 09:38:38