使用Silverlight播放用户的歌曲

时间:2010-12-02 04:02:17

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

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

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

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

另外,我非常喜欢使用文件浏览器从文件流加载歌曲的示例,但这不太重要,可以轻松转换Isolated Storage示例。

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

最后,与示例一样,我宁愿用C#代码而不是XAML代替。

1 个答案:

答案 0 :(得分:1)

  1. 由于文件将以异步方式打开,因此无法使用与SetSource命令相同的方法执行Play命令。通过将AutoPlay设置为true(这也是defualt)。您确保它会在加载后立即播放。

    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文件的时间,并仅在这种情况下使用第二个代码示例。