Как я упомянул в Twitter, в Windows Phone 8 вы можете добавлять или удалять песни из музыкальной библиотеки устройства. с помощью MediaLibraryExtensions. Новая возможность упоминается в MSDN здесь. Однако мне не удалось найти никакой документации по API, поэтому вот распечатка API для новой библиотеки Microsoft.Xna.Framework.MediaLibraryExtensions.dll:
//Microsoft.Xna.Framework.MediaLibraryExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553
namespace Microsoft.Xna.Framework.Media.PhoneExtensions {
public static class MediaLibraryExtensions {
public static void Delete(MediaLibrary library, Song song);
public static String GetPath(Picture picture);
public static String GetPathFromToken(MediaLibrary library, String token);
public static Stream GetPreviewImage(Picture picture);
public static Song SaveSong(MediaLibrary library, Uri filename, SongMetadata songMetadata, SaveSongOperation operation);
}
public enum SaveSongOperation {
CopyToLibrary,
MoveToLibrary
}
public sealed class SongMetadata {
public SongMetadata();
public Uri AlbumArtistBackgroundUri { get; set; }
public String AlbumArtistName { get; set; }
public Uri AlbumArtUri { get; set; }
public String AlbumName { get; set; }
public DateTime AlbumReleaseDate { get; set; }
public Uri ArtistBackgroundUri { get; set; }
public String ArtistName { get; set; }
public TimeSpan Duration { get; set; }
public String GenreName { get; set; }
public String Name { get; set; }
public Int32 TrackNumber { get; set; }
}
}
Вы можете использовать этот новый API, вызвав SaveSong с локальным URI и потенциально переопределив метаданные ID3, включив пользовательские метаданные SongMetadata. Этот API позволяет вам хранить только новые песни, но я думаю, вы можете сгруппировать свои подкасты под фракционным исполнителем. Краткое примечание об этом API: обязательно добавьте новую ссылку DLL MediaLibraryExtensions DLL. Вы также можете оставить SongMetadata нулевым, чтобы ОС WP8 выводила метаданные ID3.
Вот простой фрагмент кода:
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var sourceFile = await Package.Current.InstalledLocation.GetFileAsync("ChargeOfTheLightBridge.mp3");
CopyFileIntoIsoStore(sourceFile);
var library = new MediaLibrary();
library.SaveSong(new Uri(sourceFile.Name, UriKind.RelativeOrAbsolute),
new SongMetadata()
{
ArtistName = "My Custom Artist",
AlbumArtistName = "My Custom Artist",
Name = "My Custom Track Name",
AlbumName = "clubbing baby seals in the face",
Duration = TimeSpan.FromSeconds(29),
TrackNumber = 1,
AlbumReleaseDate = DateTime.Now,
GenreName = "Podcasts"
},
SaveSongOperation.CopyToLibrary);
}
private async void CopyFileIntoIsoStore(StorageFile sourceFile)
{
using (var s = await sourceFile.OpenReadAsync())
using (var dr = new DataReader(s))
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
using (var targetFile = isoStore.CreateFile(sourceFile.Name))
{
var data = new byte[s.Size];
await dr.LoadAsync((uint) s.Size);
dr.ReadBytes(data);
targetFile.Write(data, 0, data.Length);
}
}
Обратите внимание, что для использования этого API нам пришлось сохранить файл в IsoStore. Также обратите внимание, что Uri неправильно сформирован или находится в стандартном Uri IsoStore. Это просто имя файла.
Когда мы запускаем этот фрагмент кода, мы видим следующее:
![Список исполнителей с пользовательским исполнителем](https://i.stack.imgur.com/fLUot.png)
![Просмотр альбома для пользовательского исполнителя](https://i.stack.imgur.com/Y2Rrq.png)
![воспроизведение пользовательской песни](https: //i.stack.imgur.com/EcWd3.png)
person
JustinAngel
schedule
02.01.2013