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