silverlight应用程序如何从URL下载和播放mp3文件?

silverlight应用程序如何从URL下载和播放mp3文件?,silverlight,audio,mp3,Silverlight,Audio,Mp3,我有一个小型Silverlight应用程序,它可以从URL下载它需要的所有图像和文本,如下所示: if (dataItem.Kind == DataItemKind.BitmapImage) { WebClient webClientBitmapImageLoader = new WebClient(); webClientBitmapImageLoader.OpenReadCompleted += new OpenReadCompletedEventHandler(webCli

我有一个小型Silverlight应用程序,它可以从URL下载它需要的所有图像和文本,如下所示:

if (dataItem.Kind == DataItemKind.BitmapImage)
{
    WebClient webClientBitmapImageLoader = new WebClient();
    webClientBitmapImageLoader.OpenReadCompleted += new OpenReadCompletedEventHandler(webClientBitmapImageLoader_OpenReadCompleted);
    webClientBitmapImageLoader.OpenReadAsync(new Uri(dataItem.SourceUri, UriKind.Absolute), dataItem);
}
else if (dataItem.Kind == DataItemKind.TextFile)
{
    WebClient webClientTextFileLoader = new WebClient();
    webClientTextFileLoader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClientTextFileLoader_DownloadStringCompleted);
    webClientTextFileLoader.DownloadStringAsync(new Uri(dataItem.SourceUri, UriKind.Absolute), dataItem);
}
以及:

然后将每个图像和文本文件放入词典中,以便应用程序可以随时访问它们这很有效。

现在我想对mp3文件做同样的处理,但是我在网上找到的关于在Silverlight中播放mp3文件的所有信息都显示了如何将它们嵌入.xap文件,我不想这样做,因为我无法像上面那样动态下载它们


如何在Silverlight中下载和播放mp3文件,就像下载和显示图像和文本一样?

您可以将mp3作为二进制流下载,并将结果存储在字节数组中。它是您将存储在字典中的字节数组

在将字节数组分配给MediaElement时,可以使用如下代码:-

void SetMediaElementSource(MediaElement me, byte[] mp3)
{
  me.SetSource(new MemoryStream(mp3));
}

很好地工作,在MediaElement进入字典后,我只需将其拉出并调用.Play(),谢谢MediaElement只播放一次,但我如何让它播放两次@Edward:我会担心一次让太多的MediaElement保持活力。如果您可能需要查看整个词典策略的内存成本,以确保它确实过于昂贵。但如果我希望silverlight中有什么替代方案,例如,悬停时立即播放50个声音(语言教育应用程序),请单击,等等。在我看来,最好的用户体验是在开始时等待10秒加载(并将其保存在独立的存储中,以备以后使用),然后用户必须不断等待悬停,单击以加载声音,对吗?@Edward:可能不需要其他选择,但您应该意识到,如果客户机内存负担过大,最终可能会给用户带来更糟糕的体验,而不是更好的体验。另一种方法是让浏览器缓存完成它的工作,在启动时充分利用适当的缓存头将这些资源下载到客户端,这样子任务“真实”请求就可以从本地缓存加载到资源。这可能不适用于所有类型的媒体,在这种情况下,如果您想减少应用程序的内存占用,字节阵列甚至一些独立存储可能会提供一些替代方案。
void SetMediaElementSource(MediaElement me, byte[] mp3)
{
  me.SetSource(new MemoryStream(mp3));
}