fix: move audio playback into another thread

This commit is contained in:
Rekai Nyangadzayi Musuka 2020-12-08 16:19:46 -06:00
parent 0e03745f0b
commit 2f971c96a1
2 changed files with 19 additions and 9 deletions

View File

@ -1,5 +1,4 @@
use rodio::{Decoder, Source, OutputStream};
use std::error::Error;
use rodio::{Decoder, OutputStream, Sink, Source};
use std::fs::File;
use std::io::BufReader;
use std::path::PathBuf;
@ -18,12 +17,23 @@ impl Alert {
self.path = path;
}
pub fn play(&self) -> Result<(), Box<dyn Error>> {
let (_, handle) = OutputStream::try_default()?;
let file = File::open(&self.path)?;
let source = Decoder::new(BufReader::new(file))?;
pub fn play(&self) {
let file = File::open(&self.path).unwrap();
handle.play_raw(source.convert_samples()).unwrap(); // use ?, blocked: https://github.com/RustAudio/rodio/pull/329
Ok(())
std::thread::spawn(move || {
let (_stream, handle) = OutputStream::try_default().unwrap();
let source = Decoder::new(BufReader::new(file)).unwrap();
let sink = Sink::try_new(&handle).unwrap();
sink.append(source);
loop {
if sink.len() == 0 {
break;
}
}
println!("Exited Playback Thread.");
});
}
}

View File

@ -132,7 +132,7 @@ impl Pomodoro {
};
if let Some(alert) = maybe_alert {
let _ = alert.play();
alert.play()
}
let _ = self.notify();