0

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

4

1 回答 1

2

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

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

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

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 ),它可以让你很容易地监控这些东西。

祝你好运 :)

于 2010-04-22T12:53:01.267 回答