🚧 wip: FLTK GUI demo

main
_ 2021-11-13 19:51:03 +00:00
parent 70e5182dfc
commit f2484dda91
1 changed files with 30 additions and 11 deletions

View File

@ -8,9 +8,8 @@ use std::{
},
thread::{
self,
sleep,
},
time::{Duration, Instant},
time::{Instant},
};
use anyhow::{
@ -102,7 +101,14 @@ pub struct SharedState {
pub quit: bool,
}
fn cmd_gui (_args: &[String]) -> Result <()> {
fn cmd_gui (args: &[String]) -> Result <()> {
tracing_subscriber::fmt::init ();
let filenames: Vec <_> = args.iter ()
.skip (1)
.map (|s| s.to_string ())
.collect ();
let (fltk_tx, fltk_rx) = app::channel::<Message> ();
let app = app::App::default ();
@ -128,18 +134,35 @@ fn cmd_gui (_args: &[String]) -> Result <()> {
wind.end ();
wind.show ();
let shared_state = Arc::new ((Mutex::new (SharedState::default ()), Condvar::new ()));
let pcm_quit = Arc::new ((Mutex::new (false), Condvar::new ()));
let thread_decoder = DecoderThread::new (Arc::clone (&shared_state), filenames);
let mut audio_output = AudioOutput::new (Arc::clone (&pcm_quit), Arc::clone (&shared_state))?;
while app.wait () {
match fltk_rx.recv () {
Some (Message::Play) => {
tracing::info! ("play");
audio_output.play ()?;
},
Some (Message::Pause) => {
tracing::info! ("pause");
audio_output.pause ()?;
},
None => (),
}
}
tracing::debug! ("Joining decoder thread...");
thread_decoder.join ()?;
tracing::debug! ("Joining PCM thread...");
let (lock, cvar) = &*pcm_quit;
let _ = cvar.wait (lock.lock ().unwrap ()).unwrap ();
tracing::info! ("Exiting cleanly.");
Ok (())
}
@ -158,18 +181,14 @@ fn cmd_play (args: &[String]) -> Result <()> {
let audio_output = AudioOutput::new (Arc::clone (&pcm_quit), Arc::clone (&shared_state))?;
tracing::debug! ("Joining decoder thread...");
thread_decoder.join ()?;
tracing::debug! ("Joining PCM thread...");
let (lock, cvar) = &*pcm_quit;
let _ = cvar.wait (lock.lock ().unwrap ()).unwrap ();
drop (audio_output);
sleep (Duration::from_secs (1));
tracing::info! ("Exiting cleanly.");
Ok (())
}
@ -226,8 +245,8 @@ impl DecoderThread {
}
struct AudioOutput {
host: cpal::Host,
device: cpal::Device,
_host: cpal::Host,
_device: cpal::Device,
stream: cpal::Stream,
}
@ -288,8 +307,8 @@ impl AudioOutput {
)?;
Ok (Self {
host,
device,
_host: host,
_device: device,
stream,
})
}