我有一个包含很多 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
,键是文件名,值是代表文件内容的切片。
您可以使用 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();