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

    }

person mylim    schedule 28.09.2017    source источник
comment
Что означает ваша переменная recordIndex? Целочисленный индекс выбранного вами индекса списка? В какой функции находится показанный выше код? Пожалуйста, дайте мне более подробную информацию.   -  person Michael Xu - MSFT    schedule 29.09.2017
comment
Каково значение переменной recordIndex при выборе элемента в списке? Вы можете выполнить отладку и просмотреть значения recordIndex и recordFileName.   -  person Michael Xu - MSFT    schedule 29.09.2017
comment
Привет, Майкл, я добавил подробный код выше. Да, recordindex — это индекс выбранного файла в списке. Мне удалось перечислить все файлы .mp3 с USB-накопителя, выбрать их, прочитать соответствующие имена файлов и отобразить в текстовом блоке. Однако мне не удалось загрузить их для воспроизведения моим RecordPlayer (MediaPlayer).   -  person mylim    schedule 29.09.2017


Ответы (1)


Проблема связана с неправильным способом получения выбранного файла, вы должны получить файл из папки записей вместо 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);
person Michael Xu - MSFT    schedule 29.09.2017