1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| use std::{fs::File, time::Duration};
use rodio::{Decoder, MixerDeviceSink, Player};
struct MyPlay { _handle: MixerDeviceSink, player: Player, }
impl MyPlay { fn new() -> Self { let handle = rodio::DeviceSinkBuilder::open_default_sink().unwrap(); let player = rodio::Player::connect_new(handle.mixer()); Self { _handle: handle, player, } }
fn play_file(&self, path: &str) { let file = File::open(path).expect("Error0"); let source = Decoder::try_from(file).expect("Error1"); self.player.append(source); }
fn pause(&self) { self.player.pause(); }
fn play(&self) { self.play(); }
fn seek(&self, num: u64) { let dr = Duration::from_secs(num); self.player.try_seek(dr).expect("Error_seek"); } }
fn main() { let my_player = MyPlay::new(); my_player.play_file("/home/eternity/Music/K歌之王.mp3"); std::thread::sleep(Duration::from_secs(100)); }
|