如何在没有延迟的情况下同时播放多个wav文件

时间:2011-03-28 16:49:51

标签: c# performance wav playback

我有一个服务器有一些wav文件,当客户端连接时,他可以要求服务器播放它们,连接多个客户端,或者客户端在完成一次之前请求相同的wav文件两次,我需要并行再次播放。

SoundPlayer不允许这样做。我尝试了WindowsMediaPlayer对象但是在以下列方式播放时:

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

以延迟开始。

有谁知道这样做的方法?或者也许是一种在初始化时使用mediaplayer加载缓冲区的方法,以便播放速度更快?

2 个答案:

答案 0 :(得分:0)

我会说你使用的是错误的API。媒体播放器旨在呈现媒体文件(消费者媒体)不短的直接样本/剪辑

谷歌向我展示了

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

第二个甚至假设您预先在内存中加载整个示例,因此无需担心缓冲时间:)

下一个:关于平行声音;你应该尝试其他API。你可能很幸运他们是异步,否则通过任何方法使用线程池

ThreadPool.QueueUserWorkItem delegate.BeginInvoke(...)

手动创建一个新的Thread()...和Start()。要小心线程陷阱(不要做任何工作,当然不要在没有线程之间锁定的情况下共享数据)但是对于一个简单的“即发即忘”背景声音这一切都很简单(只要你保持缓冲区有声音)数据足够长 - 即使它们静止)

答案 1 :(得分:0)

尝试wmp.controls.play();

这将摆脱滞后,但不幸的是,对于WindowsMediaPlayer,你将无法比每200毫秒更频繁地播放声音,而不会错过任何一些声音。