【问题标题】:How to play multiple wav files at the same time with no delay如何无延迟地同时播放多个 wav 文件
【发布时间】:2018-01-22 05:03:37
【问题描述】:

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

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

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

从延迟开始。

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

【问题讨论】:

  • 如果您在应用初始化时已经创建了 WindowsMediaPlayer 对象怎么办?
  • 如果您正在创建一个WindowsMediaPlayer 对象,如果声音要并行播放,您是否不需要为要播放的每个声音创建一个新实例?

标签: c# performance wav playback


【解决方案1】:

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

Google 向我展示了

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

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

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

ThreadPool.QueueUserWorkItem 委托.BeginInvoke(...)

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

【讨论】:

    【解决方案2】:

    试试wmp.controls.play();

    这将消除滞后,但不幸的是,使用 WindowsMediaPlayer,您将无法比每 200 毫秒更频繁地播放声音而不会错过其中的一些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多