【问题标题】:Silverlight 4 MediaElement play soundSilverlight 4 MediaElement 播放声音
【发布时间】:2010-04-11 21:00:23
【问题描述】:

我将本地声音文件转换为资源,并在我的 XAML 中构建:

<UserControl.Resources>
    <my:Uri x:Key="SoundFiles">file:///c:/Audio/HebrewDemo/Shalom.wav</my:Uri>
</UserControl.Resources>

我通过将本地磁盘 mp3 文件名粘贴到源中来做到这一点,然后按源单击“点”并选择“将值提取到资源”。

当我运行时,它告诉我“Uri”无效,果然,在 Intellisense 中,我看到其他以“uri”开头的元素,而不仅仅是 URI 本身。

在现实世界中,我想指定一个动态 mp3 文件名。例如,我可能有一个用于抽认卡的外语单词数据库,我想在 URL 上播放声音文件。但我想我会在跑步之前尝试走路......

现在我正在尝试这个:

    mediaElement1.Source = new Uri(
                     "http://HebrewResources.com/SoundFiles/Shalom.mp3", 
                      UriKind.Absolute); 
    mediaElement1.Play(); 

FireFox 浏览器中的状态栏指示正在从网站传输一些数据。然而,我从来没有听到任何声音。可能只是编码问题吗?如果没有正确编码,我会收到错误吗?

另外,我可以将 Uri 语句放在 load 中或让它在后台运行,以便用户可以在下载声音文件的同时阅读屏幕吗?换句话说,当他单击按钮收听声音文件时,理想情况下它已经为他预加载了。在这个语言学习应用程序中,用户会看到一个外语单词,并尝试自己发音,然后他会单击“播放”按钮听到声音来检查他的结果。

【问题讨论】:

    标签: silverlight silverlight-4.0 mediaelement


    【解决方案1】:

    由于 Silverlight 的“sanboxed”安全模型,指向本地文件的第一个代码在普通 Silverlight 应用程序中不起作用。在浏览器中运行普通的 Silverlight 应用程序,如果您运行已安装的 winforms/WPF 应用程序,您将无法访问本地资源。如果您想了解有关使用 Silverlight 访问本地文件的更多信息,请观看此视频教程 http://www.silverlight.net/learn/videos/all/local-file-access/

    关于你的第二段代码,它应该可以工作,所以很可能是编码问题,不,不幸的是,你经常不会因为这样的事情而遇到任何错误。

    我创建了一个示例应用程序并将其指向您的 mp3 文件,但它不起作用,但是快速搜索示例 mp3,将我引向另一个免费提供的应用程序(第一次点击)。使用下面的代码/url,它工作正常。

    myMediaelement.Source = new Uri("http://www.robtowns.com/music/blind_willie.mp3", UriKind.Absolute);
    

    关于加载,它会在遇到设置媒体元素来源的代码时开始下载文件。因此,如果您在构造函数或加载的事件中设置媒体元素的来源,它将在后台自动开始下载。然后你只需调用 myMediaelement.Play();在按钮单击事件上。

    如果您发现使用 Firefox 有点受限,那么在确定加载什么以及何时加载外部文件或 Web 服务等内容时。有一个很棒的免费工具叫做 Fiddler (http://www.fiddlertool.com/fiddler/version.asp),它可以让你很容易地监控这些东西。

    祝你好运:)

    【讨论】:

    • 谢谢,我最终在这里开始了一个线程并进行了很多讨论。 forums.silverlight.net/forums/p/174934/397840.aspx。我添加了 MediaFailed 事件并使用 Expression Encoder 对文件进行编码(甚至不知道有一个 Expression Encoder)。可悲的是,我害怕编码大约 3000 个 mp3 文件。
    • 很高兴听到您对文件进行了排序,使用编码器 SDK 和 Powershell 对文件进行编码,您可以相当轻松地自动化该过程 :) 看看这个clarkezone.net/…,也许在“表达式编码器自动化”或类似的东西上做一些搜索
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多