2017-09-28 6 views
1

J'ai un enregistrement audio stocké dans un stockage USB et les liste dans le listbox. Je voudrais les sélectionner et cliquer sur «jouer» pour lire le fichier individuel respectivement. Actuellement, je parviens à lire le nom de fichier, mais incapable de lire le fichier.Windows IoT Raspberry Pi 3 C# Sélection et lecture audio à partir de ListBox

Mon code comme ci-dessous.

Mise à jour: (le nom est liste des enregistrements pour la listbox)

private async void recordList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      recordList.SelectedItem = recordIndex; 
      string recordFileName = recordList.SelectedItem.ToString(); 
      StatusMessage.Text = recordFileName; 

      StorageFolder externalDevices = KnownFolders.RemovableDevices; 
      IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync(); 
      StorageFolder usbStorage = externalDrives[0]; 
      StorageFolder recordFolder = await usbStorage.CreateFolderAsync(recFolderName, CreationCollisionOption.OpenIfExists); 
      await usbStorage.GetFolderAsync(recFolderName); 
      StorageFile recordFile = await usbStorage.GetFileAsync(recordFileName); 

      recordPlayer.Source = Windows.Media.Core.MediaSource.CreateFromStorageFile(recordFile); 
      recordPlayer.AutoPlay = false; 
     } 

Ce code est utilisé pour afficher tous les fichiers .mp3 dans mon lecteur USB sur le listbox.

private async void displayRecord() 
    { 
     StorageFolder externalDevices = KnownFolders.RemovableDevices; 
     IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync(); 
     StorageFolder usbStorage = externalDrives[0]; 

     StorageFolder recordFolder = await usbStorage.CreateFolderAsync(recFolderName, CreationCollisionOption.OpenIfExists); 
     await usbStorage.GetFolderAsync(recFolderName); 
     IReadOnlyList<StorageFile> recFileList = await recordFolder.GetFilesAsync(); 

     foreach(StorageFile file in recFileList) 
     { 
      recordList.Items.Add(file.Name); 
     } 

    } 
+0

Quelle est la signification de votre variable ** recordIndex **? Un index entier de votre liste index sélectionné Votre code ci-dessus est dans quelle fonction? S'il vous plaît donnez-moi plus d'informations détaillées. –

+0

Quelle est la valeur de la variable ** recordIndex ** lorsque vous avez sélectionné un élément dans la liste? Vous pouvez déboguer et regarder recordIndex et recordFileName. –

+0

Salut Micheal, j'ai ajouté le code détaillé ci-dessus. Oui, recordindex est l'index du fichier sélectionné dans la liste. J'ai réussi à lister tous les fichiers .mp3 du stockage USB et les sélectionner et lire leurs noms de fichiers respectifs et afficher sur un bloc de texte. Cependant, je n'ai pas réussi à les charger pour être joué par mon recordPlayer (MediaPlayer). – mylim

Répondre

2

Le problème est dû à une mauvaise façon d'obtenir le fichier sélectionné, vous devez obtenir le fichier de votre recordFolder au lieu de usbstorage.

await usbStorage.GetFolderAsync(recFolderName);

Bien que vous obtenez le dossier d'enregistrement, vous n'avez pas redirect dans ce dossier pour obtenir le fichier.

StorageFile recordFile = await usbStorage.GetFileAsync(recordFileName);

Dans ce code de ligne, vous obtenez le fichier usb dossier racine ou non votre dossier d'enregistrement, bien sûr ne sera pas obtenir le fichier, il y aura une exception levée.

Veuillez voir ci-dessous le code dans la fonction recordList_SelectionChanged que j'ai modifié, il fonctionne bien.

 //await usbStorage.GetFolderAsync(recFolderName); 
     //StorageFile recordFile = await usbStorage.GetFileAsync(recordFileName); 
     recordFolder = await usbStorage.GetFolderAsync(recFolderName); 
     StorageFile recordFile = await recordFolder.GetFileAsync(recordFileName);