我有一个服务器有一些wav文件,当客户端连接时,他可以要求服务器播放它们,连接多个客户端,或者客户端在完成一次之前请求相同的wav文件两次,我需要并行再次播放。
SoundPlayer
不允许这样做。我尝试了WindowsMediaPlayer
对象但是在以下列方式播放时:
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.URL = sounds_folder;
以延迟开始。
有谁知道这样做的方法?或者也许是一种在初始化时使用mediaplayer加载缓冲区的方法,以便播放速度更快?
答案 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毫秒更频繁地播放声音,而不会错过任何一些声音。