Windows IoT Raspberry Pi 3 C# Выбрать и воспроизвести аудио из списка

У меня есть записанный звук, хранящийся на USB-накопителе, и я перечисляю их в listbox, Я хотел бы выбрать их и нажать "Воспроизвести", чтобы воспроизвести отдельный файл соответственно. В настоящее время мне удается прочитать имя файла, но не могу воспроизвести файл.

Мой код, как показано ниже.

Обновлено: (список записей - это имя для 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;
        }

Этот код используется для отображения всех файлов.mp3 на моем USB-накопителе на 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);
        }

    }

1 ответ

Решение

Проблема связана с неправильным способом получения выбранного файла, вы должны получить файл из вашего recordFolder вместо 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);
Другие вопросы по тегам