【问题标题】:Play User's Songs using Silverlight使用 Silverlight 播放用户的歌曲
【发布时间】:2010-12-08 01:49:16
【问题描述】:

有没有人有一个工作(测试)的代码示例来播放来自隔离存储的音频文件。我目前拥有的不会抛出异常或发出任何声音的代码是:

        MediaElement ME = new MediaElement();
        ME.AutoPlay = false;
        IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
        ME.SetSource(ISF.OpenFile("foo.wav", FileMode.Open));
        ME.Play();

我尝试过使用多种不同的音频格式,使用 Expression 编码,但我总是遇到同样的问题。

另外,我非常想要一个使用文件浏览器从文件流中加载歌曲的示例,但这并不重要,并且可以轻松转换独立存储示例。

我已经检查过了,如果我将文件嵌入到应用程序中,它可以正常播放。问题是我希望用户能够将他们自己的歌曲加载到应用程序中,然后将其存储在独立存储中并从中播放。

最后,与示例一样,我宁愿在 C# 代码中执行此操作,而不是 XAML。

【问题讨论】:

  • 后来你检查CurrentState属性了吗?您是否尝试将处理程序挂钩到 MediaFailed 事件?
  • 您是否尝试过打开文本或图像文件以确保您的操作正确?
  • 当前状态直接进入暂停状态。似乎在文件加载之后播放方法才会起作用(当我将它放在单独的事件处理程序中时起作用)。将 AutoPlay 设置为 true 可以正常工作。
  • 您应该将其添加为答案并接受它(几天后)>它将帮助遇到同样问题的其他人。
  • 我遇到了类似的问题。如果您将解决方案作为答案发布,我们将不胜感激。

标签: c# silverlight visual-studio-2010 audio expression-encoder


【解决方案1】:
  1. 您不能使用与 SetSource 命令相同的方法使用 Play 命令,因为文件将被异步打开。通过将 AutoPlay 设置为 true(这也是默认设置)。您确保它会在加载后立即播放。

    MediaElement ME = new MediaElement();
    ME.AutoPlay = true;
    IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
    ME.SetSource(ISF.OpenFile("foo.wma", FileMode.Open));
    
  2. Silvelright 本身不支持 wav 文件,所以要播放 wav 文件需要下载http://code.msdn.microsoft.com/wavmss,然后使用以下代码。

    MediaElement ME = new MediaElement();
    ME.AutoPlay = true;
    IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
    ME.SetSource(new WaveMediaStreamSource(ISF.OpenFile("foo.wav", FileMode.Open)));
    

    虽然不理想,但您可以使用文件扩展名来检测何时播放 wav 文件并仅在这种情况下使用第二个代码示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2014-08-07
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多