diff options
| -rw-r--r-- | src/errors.rs | 2 | ||||
| -rw-r--r-- | src/map.rs | 27 | ||||
| -rw-r--r-- | src/sounds.rs | 32 |
3 files changed, 34 insertions, 27 deletions
diff --git a/src/errors.rs b/src/errors.rs index f7f3d79..3426cac 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -1,11 +1,13 @@ use chrono; use magic_crypt; +use rodio; use xdg; error_chain! { foreign_links { Io(::std::io::Error); + Rodio(rodio::decoder::DecoderError); Xdg(xdg::BaseDirectoriesError); DateCrypt(DateCryptError); @@ -1,10 +1,7 @@ use std::env; use std::ffi::OsString; -use std::io::BufReader; use std::process::Command; -use rodio::{self, Source}; - use {Action, HeadphoneButton, MapAction, MapKind}; use ffi::State; use sounds; @@ -78,27 +75,3 @@ fn run_action(map_action: &MapAction) { }, } } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn play_audio() { - let mode_activated = include_bytes!("../sounds/activ.wav"); - // let mut sound = sounds::MODE_ACTIVATED; - // let mut reader = BufReader::new(sounds::MODE_ACTIVATED); - let file = ::std::fs::File::open("sounds/activ.wav").unwrap(); - // let reader = BufReader::new(&mode_activated[..]); - // let reader = BufReader::new(mode_activated); - // let reader = BufReader::new(file); - let reader = ::std::io::Cursor::new(sounds::MODE_ACTIVATED); -let device = rodio::default_output_device().unwrap(); -// let source = rodio::Decoder::new(reader).unwrap(); -// rodio::play_raw(&device, source.convert_samples()); -// ::std::thread::sleep_ms(2000); -let sink = rodio::play_once(&device, reader).unwrap(); -sink.sleep_until_end(); -sink.play(); - } -} diff --git a/src/sounds.rs b/src/sounds.rs index 8cb6b51..e0c1093 100644 --- a/src/sounds.rs +++ b/src/sounds.rs @@ -1,4 +1,36 @@ +use std::io::Cursor; + +use rodio; + +use errors::*; + // const MODE_ACTIVATED = include_bytes!("../sounds/mode_activated.ogg"); // const MODE_DEACTIVATED = include_bytes!("../sounds/mode_deactivated.ogg"); pub const MODE_ACTIVATED: &'static [u8] = include_bytes!("../sounds/activ.wav"); + +pub fn play_audio<R>(r: R) -> Result<()> +where R: AsRef<[u8]> + Send + 'static { + let device = rodio::default_output_device() + .chain_err(|| "could not find an audio output device")?; + + let reader = Cursor::new(r); + let sink = rodio::play_once(&device, reader) + .chain_err(|| "error playing audio")?; + + sink.sleep_until_end(); + sink.play(); + + Ok(()) +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn play_audio_plays_audio() { + play_audio(MODE_ACTIVATED).unwrap(); + } +} |
