#![doc = "libminau - A flexible audio playback library"]
#![allow(unused)]
mod display_image;
mod display_info;
mod m3u;
mod play_url;
pub mod player;
pub mod error;
pub use player::{
Player,
LocalPlayer,
StreamPlayer,
PlaybackState,
};
pub use player::metadata::MetaData;
pub use error::{Error, Result};
pub use m3u::Playlist;
#[cfg(test)]
mod examples {
use std::time::Duration;
use async_compat::CompatExt;
use super::*;
#[test]
fn local_playback() -> crate::Result<()> {
let mut player = LocalPlayer::new("/home/konoha/Music/Music/Take Me There.mp3")?;
let metadata = player.metadata();
println!("Title: {:?}", metadata.title());
println!("Artist: {:?}", metadata.artist());
player.play()?;
player.set_volume(0.5)?;
std::thread::sleep(std::time::Duration::from_secs(5));
player.seek(std::time::Duration::from_secs(30))?;
std::thread::sleep(std::time::Duration::from_secs(5));
player.pause()?;
Ok(())
}
async fn streaming_playback() -> crate::Result<()> {
let player = StreamPlayer::new("https://kathy.torontocast.com:3330/", 0.8).await?;
smol::block_on(async {
smol::Timer::after(Duration::from_secs(10)).await;
});
player.pause();
println!("Downloaded: {:.2} MB", player.downloaded_mb());
Ok(())
}
#[test]
fn playlist_usage() -> crate::Result<()> {
let playlist = Playlist::from_file("/home/konoha/Music/MusicList/chill.m3u8")
.unwrap();
for entry in playlist.entries() {
println!("Playing: {:?}", entry.title);
if entry.path.starts_with("http://") || entry.path.starts_with("https://") {
smol::block_on(async {
let mut player = Player::from_url(&entry.path, 1.0).compat().await.unwrap();
player.play().unwrap();
smol::Timer::after(Duration::from_secs(10)).await;
});
continue;
} else {
smol::block_on(async {
let mut player = Player::from_file(&entry.path).unwrap();
player.play().unwrap();
smol::Timer::after(Duration::from_secs(10)).await;
});
continue;
}
}
Ok(())
}
fn unified_player() -> crate::Result<()> {
let mut player = Player::from_file("music.mp3")?;
player.set_volume(0.7)?;
player.play().unwrap();
smol::block_on(player.wait_until_finished());
smol::block_on(async {
let player = Player::from_url("https://example.com/stream.mp3", 0.7).await.expect("Failed to stream url music");
player.pause().expect("Failed to stop music");
});
Ok(())
}
}