W10通用:如何使用Backgroundaudio从磁盘播放歌曲
本文关键字:磁盘 播放 Backgroundaudio 通用 何使用 W10 | 更新日期: 2023-09-27 17:59:41
Microsoft W10通用应用程序背景音频示例可以播放///资产中存储的.wma文件列表,如下所示:
var song2 = new SongModel();
song2.Title = "Ring 2";
song2.MediaUri = new Uri("ms-appx:///Assets/Media/Ring02.wma");
song2.AlbumArtUri = new Uri("ms-appx:///Assets/Media/Ring02.jpg");
playlistView.Songs.Add(song2);
但我无法让程序播放存储在磁盘上的.wma文件。我尝试使用FileOpenPicker选择一个文件,将其分配给StorageFile文件,然后:
if (file != null)
{
Uri uri = new Uri(file.Path);
song2.MediaUri = uri;
}
或者(临时)把它放在图片库中(我在功能中检查了一下),我以为我可以这样访问,但要么不是这样,要么不起作用(很可能两者都有):
string name = "ms-appdata:///local/images/SomeSong.wma";
Uri uri = new Uri(name, UriKind.Absolute);
song1.MediaUri = uri;
只能听到原始///资产WMA的声音。
我应该更改什么?如何将KnownFolders目录转换为Uri?
背景音频示例使用MediaSource.CreateFromUri方法创建媒体源。使用此方法时,参数只能设置为应用程序中包含的文件的统一资源标识符(URI)或网络上文件的URI。要使用FileOpenPicker对象将源设置为从本地系统检索的文件,我们可以使用MediaSource.CreateFromStorageFile方法。每当我们的应用程序通过选择器访问文件或文件夹时,我们都可以将其添加到应用程序的FutureAccessList或MostRcentlyUsedList中以跟踪它。
例如,在我们从FileOpenPicker
获得StorageFile
后,我们可以将其添加到FutureAccessList
中,并存储令牌,应用程序稍后可以使用该令牌在应用程序的本地设置中检索存储项,如:
if (file != null)
{
var token = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file);
ApplicationData.Current.LocalSettings.Values["song1"] = token;
}
有关FutureAccessList
的更多信息,请参阅跟踪最近使用的文件和文件夹。
然后在BackgroundAudioTask
中,我更改了CreatePlaybackList
方法,以取代原来的类似:
private async void CreatePlaybackList(IEnumerable<SongModel> songs)
{
// Make a new list and enable looping
playbackList = new MediaPlaybackList();
playbackList.AutoRepeatEnabled = true;
// Add playback items to the list
foreach (var song in songs)
{
MediaSource source;
//Replace Ring 1 to the song we select
if (song.Title.Equals("Ring 1"))
{
var file = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFileAsync(ApplicationData.Current.LocalSettings.Values["song1"].ToString());
source = MediaSource.CreateFromStorageFile(file);
}
else
{
source = MediaSource.CreateFromUri(song.MediaUri);
}
source.CustomProperties[TrackIdKey] = song.MediaUri;
source.CustomProperties[TitleKey] = song.Title;
source.CustomProperties[AlbumArtKey] = song.AlbumArtUri;
playbackList.Items.Add(new MediaPlaybackItem(source));
}
// Don't auto start
BackgroundMediaPlayer.Current.AutoPlay = false;
// Assign the list to the player
BackgroundMediaPlayer.Current.Source = playbackList;
// Add handler for future playlist item changes
playbackList.CurrentItemChanged += PlaybackList_CurrentItemChanged;
}
这只是一个简单的示例,您可能需要更改SongModel
和其他一些代码来实现您自己的播放器。有关背景音频的更多信息,您也可以参考背景音频的基础知识。此外,在Windows10 1607版本中,对媒体播放API进行了重大改进,包括简化了背景音频的单进程设计。您可以在后台看到播放媒体以检查新功能。