use std::fs::File;
use std::io::BufReader;
#[allow(unused_imports)]
use rodio::{Decoder, OutputStream, Source};
pub fn play_audio_path(
path: &str,
volume: f32,
loop_audio: bool,
sink: &rodio::Sink
) {
let menu_loop_sound: Decoder<BufReader<File>> = Decoder::new(
BufReader::new(
File::open(path).unwrap()
)
).unwrap();
if loop_audio {
sink.append(menu_loop_sound.repeat_infinite());
} else {
sink.append(menu_loop_sound);
}
sink.play();
sink.set_volume(volume);
}
pub fn play_audio(
audio: Decoder<BufReader<File>>,
volume: f32,
loop_audio: bool,
sink: &rodio::Sink
) {
if loop_audio {
sink.append(audio.repeat_infinite());
} else {
sink.append(audio);
}
sink.play();
sink.set_volume(volume);
}
pub fn load_audio(
path: &str
) -> Decoder<BufReader<File>> {
return Decoder::new(
BufReader::new(
File::open(path).unwrap()
)
).unwrap()
}
pub fn stop_audio(
sink: &rodio::Sink
) {
sink.stop();
}
pub fn restart_audio(
sink: &rodio::Sink
) {
sink.try_seek(std::time::Duration::from_secs(0)).unwrap();
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn audio_testing() {
let (_stream, stream_handle) = OutputStream::try_default().unwrap();
let sink = rodio::Sink::try_new(&stream_handle).unwrap();
let test_sound = load_audio("./menu-music.mp3");
play_audio_path("./menu-music.mp3", 2.0, false, &sink);
std::thread::sleep(std::time::Duration::from_secs(1));
stop_audio(&sink);
std::thread::sleep(std::time::Duration::from_secs(1));
play_audio(test_sound, 2.0, false, &sink);
std::thread::sleep(std::time::Duration::from_secs(1));
restart_audio(&sink);
std::thread::sleep(std::time::Duration::from_secs_f32(0.5));
restart_audio(&sink);
std::thread::sleep(std::time::Duration::from_secs_f32(0.5));
restart_audio(&sink);
std::thread::sleep(std::time::Duration::from_secs(3));
stop_audio(&sink);
play_audio_path("./menu-music.mp3", 2.0, true, &sink);
std::thread::sleep(std::time::Duration::from_secs(100));
}
}
pub mod rodio_raw {
pub use rodio::*;
}