2016-08-02 1 views
0

Les apps Microsoft Universal W10 Background Extrait audio peut lire une liste de fichiers .wma stockés dans /// actifs, comme ceci:W10 Universal: comment lire une chanson à partir d'un disque en utilisant 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); 

Mais je ne peux pas obtenir le programme pour jouer .wma fichiers stockés sur disque. J'ai essayé de sélectionner un fichier en utilisant le FileOpenPicker, l'assigner à fichier StorageFile puis:

if (file != null) 
{ 
Uri uri = new Uri(file.Path); 
song2.MediaUri = uri; 
} 

ou (temporaire) plaçant dans la bibliothèque d'images (que je suis arrivé dans les capacités) que je pensais que je pouvais accéder comme cela, mais ce n'est pas non plus le cas ou il ne fonctionne pas (et très probablement les deux):

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

Seul l'original /// actifs WMA est audible.

Que dois-je changer? Et comment puis-je convertir un répertoire KnownFolders en Uri? L'exemple d'arrière-plan audio utilise MediaSource.CreateFromUri method pour créer une source multimédia.

Répondre

0

Lors de l'utilisation de cette méthode, le paramètre peut uniquement être défini sur l'URI (Uniform Resource Identifier) ​​d'un fichier inclus avec l'application ou l'URI d'un fichier sur le réseau. Pour définir la source sur un fichier récupéré à partir du système local à l'aide d'un objet FileOpenPicker, nous pouvons utiliser la méthode MediaSource.CreateFromStorageFile. Et chaque fois que notre application accède à un fichier ou un dossier via un sélecteur, nous pouvons l'ajouter à FutureAccessList ou MostRecentlyUsedList de l'application pour garder une trace de celui-ci.

Par exemple, après que nous obtenions la StorageFile de FileOpenPicker, nous pouvons ajouter à FutureAccessList et stocker le jeton que l'application peut utiliser plus tard pour récupérer l'élément de stockage dans les paramètres locaux app comme:

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

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

Pour plus d'informations sur FutureAccessList, s'il vous plaît voir Track recently used files and folders.

Puis, en BackgroundAudioTask, j'ai changé la méthode CreatePlaybackList pour remplacer l'original comme:

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

Ceci est juste un échantillon simple, vous devrez peut-être changer le SongModel et un autre code pour mettre en œuvre votre propre lecteur. Pour plus d'informations sur l'audio en arrière-plan, vous pouvez également vous reporter à The Basics of Background Audio. En outre, avec Windows 10, version 1607, des améliorations significatives ont été apportées aux API de lecture multimédia, y compris une conception simplifiée à un seul processus pour l'audio de fond. Vous pouvez voir Play media in the background pour vérifier la nouvelle fonctionnalité.