使用Silverlight 2进行简短的音频缓存

时间:2009-05-26 00:58:20

标签: silverlight audio silverlight-2.0

我正在尝试在Silverlight 2中创建的游戏中使用大量短音样本。样本长度不到2秒。

我希望在初始化期间将所有音频样本加载到画布上。我一直在向画布添加媒体元素和管理它的通用列表。到目前为止,它似乎有效。

当我第一次播放样本时,它会完美播放。如果它已经完成播放并且我想重新使用相同的元素,它会切断声音的第一部分。要再次播放样本,我会停止并播放媒体元素。

是否有其他方法我应该使用这些样本,以便不会剪切音频并获得良好的性能?

3 个答案:

答案 0 :(得分:1)

一些意见:

来自MSDN: 尝试一次限制应用程序中的MediaElement对象的数量。如果应用程序树中有超过一百个MediaElement对象,无论它们是否同时播放,都可能引发MediaFailed事件。解决此问题的方法是在需要时将MediaElement对象添加到树中,并在不需要时将其删除。

你可以尝试寻找样本的开头来重置当前正在播放的点,然后重新使用它:

mediaelement.Position = new TimeSpan();

另见MSDNs MediaElement.Position

答案 1 :(得分:1)

此外,最好确保所有音频样本最初都放到客户端。根据您的设置方式,MediaElements可能正在使用其渐进式下载功能从服务器获取媒体文件。虽然这本身没有任何问题(浏览器缓存应该在初始下载后帮助你),但它确实意味着你必须处理浏览器缓存,并且存在一些潜在的问题。

尝试的可能步骤:

  1. 将您的音频文件标记为“内容”。这将使他们在.xap中获得成功。
  2. 将音频文件加载到MemoryStreams(请参阅Application.GetResourceStream方法)并调用MediaElement.SetSource()。
  3. HTH, 埃里克

答案 2 :(得分:0)

您可以使用的一项技术,虽然我不确定它在Silverlight中的效果如何,但是创建一个大文件,将所有样本连接在一起(每个样本之间可能有半秒左右的静音)。找出每个样本的时间码,并寻找媒体元素到该位置并播放。您只需要与想要播放的同步声音一样多的媒体元素。