如何使用 Bevy 加载文件夹中的所有音频文件?

How can I load all the audio files inside a folder using Bevy?

我正在尝试制作一个音乐播放器,用户可以在其中播放文件夹中的任何音频文件。为此,我尝试生成包含 Music 组件和 Sound(Handle<AudioSource>) 组件的实体。在Bevy的例子中,我看到这行代码似乎就是我想要的:

// You can load all assets in a folder like this. They will be loaded in parallel without blocking
let _scenes: Vec<HandleUntyped> = asset_server.load_folder("models/monkey").unwrap();

下面是我写的函数:

fn load_audio(mut commands: Commands, asset_server: Res<AssetServer>, audio: Res<Audio>) {
    let music = asset_server.load_folder("music").unwrap();
    for song in music {
        commands.spawn((
            Music,
            Sound(song),
        ));
    }
}

此代码给出编译错误,因为 song 属于 HandleUntyped 类型。我的第一个想法是将 HandleUntyped 转换为 Handle<AudioSource>。我不得不想象有某种方法可以做到这一点,否则 HanldeUntyped 将毫无用处,但通过查看 Bevy 文档我找不到任何方法来做到这一点。 Handle::<AudioSource>::from(song) 无效。我也考虑过使用 std::fs 库来获取目录中的所有音频文件并使用 Bevy 单独加载它们,但是 load_folder 方法的存在似乎暗示 Bevy 有一个更优雅的和简单的方法。

当然在放弃搜索并发布问题后,我立即找到了答案。 HandleUntyped 实现 typed() 函数,将其转换为类型化的 Handle。我需要做的就是将 Sound(song) 替换为 Sound(song.typed()).