rodio
OutputStream→DecoderMP3/WAV/FLACSink///
→ rodio::Decoder → PCM → Sink::append
reqwest HTTP Stream trait Decoder::new(Cursor::new(data))
[dependencies]
rodio = "0.19"
reqwest = { version = "0.12", features = ["stream"] }use rodio::{Decoder, OutputStream, Sink, Source};
use std::fs::File;
use std::io::BufReader;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let (_stream, handle) = OutputStream::try_default()?;
let sink = Sink::try_new(&handle)?;
let file = BufReader::new(File::open("song.mp3")?);
let source = Decoder::new(file)?;
sink.append(source);
sink.set_volume(0.5);
sink.play();
sink.pause();
sink.stop();
sink.sleep_until_end();
Ok(())
}I/O