我正在尝试使用歌曲的目录路径从本地计算机播放歌曲。
MediaElement.Source = new Uri(@"D:\Music\Artist\Album\Song.mp3", UriKind.Absolute);
这甚至可以开始工作,还是Windows 8应用只能使用像mss-appx这样的URI方案来访问包数据?
当我尝试运行代码时,我在MediaElement控件“Invalid Source”上收到一条消息
答案 0 :(得分:1)
您需要使用文件打开选择器在D盘中选择文件。
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
openPicker.FileTypeFilter.Add(".mp3");
StorageFile file = await openPicker.PickSingleFileAsync();
IRandomAccessStreamWithContentType content = await file.OpenReadAsync();
Debug.WriteLine("Content Type: " + content.ContentType);
player.SetSource(content, content.ContentType);
答案 1 :(得分:1)
Windows应用商店应用没有对文件系统的完全访问权限。他们可以直接访问(通过路径)有限的位置(即他们的安装和应用程序数据文件夹)。
MediaElement可以从它可以直接访问的路径加载项目,但这通常没有用,因为这些位置有URI(ms-appx:和ms-appdata :),它将定位到正确的位置,而不管实际的Path是什么
通常,歌曲位于音乐库中,MediaElement无法直接访问。它可以通过MusicLibrary功能获得代理访问,但这不允许通过路径访问。该应用程序需要通过KnownFolders对象访问该文件:
private async void Button_Click(object sender, RoutedEventArgs e)
{
StorageFolder musicLib = Windows.Storage.KnownFolders.MusicLibrary;
StorageFile song = await musicLib.GetFileAsync(@"Artist\Album\Song.mp3");
var stream = await song.OpenReadAsync();
me.SetSource(stream, stream.ContentType);
}
如果歌曲不在可以被功能允许的库中,则用户需要通过FolderPicker等授予权限。用户可以选择音乐位置的根目录,应用程序可以使用Windows.Storage.AccessCache类对其进行缓存,这样用户就不需要多次选择文件夹或单独选择文件。
中更详细地讨论了这个问题答案 2 :(得分:0)
This link has the answer (in case you can use the application folder)
MediaElement.Source = new Uri("ms-appx-web:///Assets/Song.mp3", UriKind.Absolute);