Windows IoT Raspberry Pi 3 C# Select & 从列表框播放音频

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

我在 USB 存储器中存储了一段录制的音频,并将它们列在 listbox 中。我想 select 它们并单击 'play' 分别播放单个文件。目前我设法读取文件名但无法播放文件。

我的代码如下。

更新: (记录列表是 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;
        }

这是用于显示 listbox 上我的 USB 驱动器中所有 .mp3 文件的代码。

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

    }

问题是由于获取所选文件的方式错误,您应该从您的记录文件夹而不是 usbStorage 获取文件。

await usbStorage.GetFolderAsync(recFolderName);

虽然你得到了记录文件夹,但你没有重定向到这个文件夹来获取文件。

StorageFile recordFile = await usbStorage.GetFileAsync(recordFileName);

在这行代码中,你从usb根文件夹中获取文件,或者不是你的记录文件夹,当然不会获取文件,会抛出异常。

请参阅我修改的recordList_SelectionChanged函数中的以下代码,它运行正常。

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