我将本地声音文件转换为资源,在我的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语句放在加载中还是让它在后台运行,这样用户可以在下载声音文件的同时读取屏幕?换句话说,当他点击按钮听到声音文件时,理想情况下它已经预先加载了。在这个语言学习应用程序中,用户将看到一个外语单词,并尝试自己发音,然后他将点击“播放”按钮听到声音来检查他的结果。
答案 0 :(得分:2)
由于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);
关于加载,当它到达设置mediaelement源的代码时,它将开始下载文件。因此,如果您在构造函数或加载的事件中设置media元素的源,它将自动开始在后台下载。然后你只需要调用myMediaelement.Play();按钮点击事件。
如果您发现使用Firefox有点受限,那么在确定加载外部文件或Web服务之类的内容时。有一个很棒的免费工具叫做Fiddler(http://www.fiddlertool.com/fiddler/version.asp),它可以让你很容易地监控这些事情。
祝你好运:)