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