2011-03-28 86 views
1

我有一個服務器,有一些wav文件,並且當客戶端連接時,他可以要求服務器播放它們中的每一個,當多個客戶端連接時,或者當一個客戶端在完成一次之前請求兩次相同的wav文件,我需要再次並行播放它。如何在沒有延遲的同時播放多個wav文件

SoundPlayer不允許。我試圖WindowsMediaPlayer對象,但通過以下方式發揮它的時候:

WindowsMediaPlayer wmp = new WindowsMediaPlayer(); 
wmp.URL = sounds_folder; 

它以一個延遲。

有沒有人知道一種方法來做到這一點?或者可能是一種在初始化時使用mediaplayer加載緩衝區的方法,這樣可以更快地播放該媒體播放器?

+0

如果您在應用程序初始化時已經創建了WindowsMediaPlayer對象,該怎麼辦? – codymanix 2011-03-28 16:54:35

+0

如果您要創建一個'WindowsMediaPlayer'對象,您是否需要爲要播放的每個聲音創建一個新實例(如果聲音要並行播放)? – 2011-03-28 16:55:10

回答

0

我會說你使用錯誤的API。媒體播放器的設計來呈現的媒體文件(消費者媒體)不得短直接採樣/剪輯

谷歌給我

http://msdn.microsoft.com/en-us/library/ms229685.aspx http://www.eggheadcafe.com/articles/20030302.asp

第二個甚至假設你預先加載了整個樣本的內存,所以沒有必要擔心緩衝時間:)

Next:關於平行聲音;你應該嘗試其他的API。你可能在運氣和他們在一起異步,否則使用線程池通過任何方法

ThreadPool.QueueUserWorkItem delegate.BeginInvoke(...)

手動

創建一個新的Thread()..和Start()。謹防線程陷阱(不要做任何工作,當然不會在線程之間沒有鎖定的情況下共享數據),但是對於一個簡單的「消失和忘記」的背景聲音來說,這一切都很簡單(只要保持緩衝區的聲音數據足夠長 - 即使它們靜止)

0

嘗試wmp.controls.play();

這將消除滯後,但不幸的是,對於WindowsMediaPlayer,您將無法播放比每隔大約200ms更頻繁的聲音,而不會漏掉某些聲音。