我正在尝试在Silverlight 2中创建的游戏中使用大量短音样本。样本长度不到2秒。
我希望在初始化期间将所有音频样本加载到画布上。我一直在向画布添加媒体元素和管理它的通用列表。到目前为止,它似乎有效。
当我第一次播放样本时,它会完美播放。如果它已经完成播放并且我想重新使用相同的元素,它会切断声音的第一部分。要再次播放样本,我会停止并播放媒体元素。
是否有其他方法我应该使用这些样本,以便不会剪切音频并获得良好的性能?
答案 0 :(得分:1)
一些意见:
来自MSDN: 尝试一次限制应用程序中的MediaElement对象的数量。如果应用程序树中有超过一百个MediaElement对象,无论它们是否同时播放,都可能引发MediaFailed事件。解决此问题的方法是在需要时将MediaElement对象添加到树中,并在不需要时将其删除。
你可以尝试寻找样本的开头来重置当前正在播放的点,然后重新使用它:
mediaelement.Position = new TimeSpan();
答案 1 :(得分:1)
此外,最好确保所有音频样本最初都放到客户端。根据您的设置方式,MediaElements可能正在使用其渐进式下载功能从服务器获取媒体文件。虽然这本身没有任何问题(浏览器缓存应该在初始下载后帮助你),但它确实意味着你必须处理浏览器缓存,并且存在一些潜在的问题。
尝试的可能步骤:
HTH, 埃里克
答案 2 :(得分:0)
您可以使用的一项技术,虽然我不确定它在Silverlight中的效果如何,但是创建一个大文件,将所有样本连接在一起(每个样本之间可能有半秒左右的静音)。找出每个样本的时间码,并寻找媒体元素到该位置并播放。您只需要与想要播放的同步声音一样多的媒体元素。