如何在编译时将目录中的所有文件嵌入 Rust 可执行文件中?

问题描述 投票:0回答:1

我有一个包含很多 MP3 文件的文件夹,我想创建一个 Rust 程序,以随机顺序播放这些文件。 (注意:我有两层文件夹。)

我希望我的程序是跨平台的(它必须在 Windows 和 Linux 上运行)并且可移植(它不能依赖于 VLC、Windows Media Player 等已安装的程序)。

我用

rodio
库编写了这个程序:

use std::io::Cursor;
use rodio::{Decoder, OutputStream, source::Source};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let (_stream, stream_handle) = OutputStream::try_default().unwrap();
    let sound_data = include_bytes!("song.mp3");
    let source = Decoder::new_mp3(Cursor::new(&sound_data[..])).unwrap();
    stream_handle.play_raw(source.convert_samples())?;
    std::thread::sleep(std::time::Duration::from_secs(240));
    Ok(())
}

但是程序只能播放一个文件。

我需要一个

HashMap
,键是文件名,值是代表文件内容的切片。

rust media-player
1个回答
0
投票

您可以使用 include-dir 板条箱。它有点类似于

include_bytes
但适用于目录:

use include_dir::{include_dir, Dir};

static SONGS: Dir = include_dir!("../songs");

// get a file
let sound_data = SONGS.get_file("song.mp3").unwrap().contents();
© www.soinside.com 2019 - 2024. All rights reserved.