2016-08-02 6 views
0

для Microsoft W10 Универсальные приложения Фоновая Аудио образец может воспроизводить список .wma файлов, хранящихся в /// активов, как это:W10 Universal: как воспроизвести песню с диска с помощью Backgroundaudio?

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; 
} 

или (временно), поместив его в библиотеке Pictures (который я проверил в возможностях), которые я думал, что я мог бы получить доступ к как это, но как это не так, или он не работает (и, скорее всего, оба):

string name = "ms-appdata:///local/images/SomeSong.wma"; 
Uri uri = new Uri(name, UriKind.Absolute); 
song1.MediaUri = uri; 

только оригинальные /// Assets WMA слышна.

Что я должен изменить? И как я могу преобразовать каталог KnownFolders в Uri?

ответ

0

Образец фонового звука использует MediaSource.CreateFromUri method для создания медиа-источника. При использовании этого метода параметр может быть установлен только в Унифицированный идентификатор ресурса (URI) файла, который входит в приложение или URI файла в сети. Чтобы установить источник в файл, полученный из локальной системы, с помощью объекта FileOpenPicker, мы можем использовать метод MediaSource.CreateFromStorageFile. И всякий раз, когда наше приложение обращается к файлу или папке через сборщик, мы можем добавить его в приложение FutureAccessList или MostRecentlyUsedList, чтобы отслеживать его.

Например, после того, как мы получим StorageFile от FileOpenPicker, мы можем добавить его в FutureAccessList и сохранить маркер, который приложение может использовать позже, чтобы получить пункт хранения в локальных настройках приложения как:

if (file != null) 
{ 
    var token = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file); 

    ApplicationData.Current.LocalSettings.Values["song1"] = token; 
} 

Для больше информации о FutureAccessList, см. Track recently used files and folders.

Тогда в 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 и некоторый другой код для реализации своего собственного игрока. Для получения дополнительной информации об фоновом аудио вы также можете обратиться к The Basics of Background Audio. Кроме того, с Windows 10, версия 1607, были внесены значительные улучшения в API-интерфейсы воспроизведения мультимедиа, в том числе упрощенную однопроцессорную схему для фонового звука. Вы можете увидеть Play media in the background, чтобы проверить новую функцию.