简体   繁体   中英

Windows IoT Raspberry Pi 3 C# Select & Play Audio from Listbox

I have a recorded audio stored in an USB storage and list them in the listbox . I would like to select them and click 'play' to play individual file respectively. Currently I manage to read the filename but unable to play the file.

My code as below.

Updated: (recordlist is the name for the 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;
        }

This is the code is use to display all the .mp3 files in my USB drive on the 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);
        }

    }

The problem is due to wrong way to get the selected file, you should get the file from your recordFolder instead of usbStorage.

await usbStorage.GetFolderAsync(recFolderName);

Although you get the record folder,you did not redirect to this folder to get file.

StorageFile recordFile = await usbStorage.GetFileAsync(recordFileName);

In this line code ,you get the file from usb root folder or not your record folder, of course will not get the file, there will be an exception thrown.

Please see below code in recordList_SelectionChanged function I modified,it runs ok.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM