Skip to content

Commit

Permalink
Merge pull request #13 from gursi26/frame-sync
Browse files Browse the repository at this point in the history
optimized fft frame counters for better frame sync
  • Loading branch information
gursi26 committed Mar 15, 2024
2 parents ad0a4ea + 3ef57a0 commit 6a1e6ab
Show file tree
Hide file tree
Showing 11 changed files with 281 additions and 122 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Expand Up @@ -23,7 +23,6 @@ serde = { version = "1.0.197", features = ["derive"] }
dirs = "5.0.1"
serde_yaml = "0.9.32"
spectrum-analyzer = "1.5.0"
stopwatch = "0.0.7"

[profile.release]
strip = true
Expand Down
10 changes: 4 additions & 6 deletions src/args.rs
@@ -1,7 +1,7 @@
use std::path::Path;
use bevy::prelude::*;
use crate::*;
use bevy::prelude::*;
use clap::{ArgAction, Parser};
use std::path::Path;

#[derive(Debug, Parser)]
#[clap(author, version, about)]
Expand Down Expand Up @@ -101,23 +101,21 @@ pub fn cli_args_to_fft_args(mut cli_args: CLIArgs, use_default: bool) -> FFTArgs
max_freq: cli_args.max_freq.unwrap(),
display_gui: cli_args.display_gui.unwrap(),
volume: cli_args.volume.unwrap(),
paused: false,
fft_fps: FFT_FPS
}
}

pub fn parse_cli_args() -> FFTArgs {
cli_args_to_fft_args(args::CLIArgs::parse(), false)
}
// Value constraints
pub fn bar_smoothness_constraint(v: u32) {
pub fn bar_smoothness_constraint(v: u32) {
if v > 3 {
println!("smoothness must be between 0 and 3 inclusive.");
std::process::exit(1);
}
}

fn freq_resolution_constraint(v: u32) {
fn freq_resolution_constraint(v: u32) {
if v < 10 || v > 300 {
println!("freq-resolution must be between 10 and 300 inclusive.");
std::process::exit(1);
Expand Down
206 changes: 166 additions & 40 deletions src/config.rs
@@ -1,10 +1,14 @@
use bevy::prelude::Color;
use dirs::home_dir;
use std::{fs::remove_file, io::{stdout, Read, Write}, path::PathBuf};
use serde::{Deserialize, Serialize};
use serde_yaml::{self};
use std::fs::{read_to_string, create_dir, create_dir_all, File, OpenOptions};
use std::fs::{create_dir, create_dir_all, read_to_string, File, OpenOptions};
use std::io::BufWriter;
use bevy::prelude::Color;
use std::{
fs::remove_file,
io::{stdout, Read, Write},
path::PathBuf,
};

use crate::{CLIArgs, FFTArgs};

Expand Down Expand Up @@ -89,16 +93,37 @@ macro_rules! overwrite_non_default_args {

pub fn convert_color_to_hex(c: &Color) -> String {
let c_vec = c.rgb_to_vec3();
let (r, g, b) = ((c_vec.x * 255.0) as u32, (c_vec.y * 255.0) as u32, (c_vec.z * 255.0) as u32);
format!("{}{}{}", format!("{:02X}", r), format!("{:02X}", g), format!("{:02X}", b))
let (r, g, b) = (
(c_vec.x * 255.0) as u32,
(c_vec.y * 255.0) as u32,
(c_vec.z * 255.0) as u32,
);
format!(
"{}{}{}",
format!("{:02X}", r),
format!("{:02X}", g),
format!("{:02X}", b)
)
}

pub fn write_fftargs_to_config(args: &FFTArgs) {
let mut default_args = ConfigFFTArgs::default();
overwrite_non_default_args!(&mut default_args.background_color, convert_color_to_hex(&args.background_color));
overwrite_non_default_args!(&mut default_args.border_color, convert_color_to_hex(&args.border_color));
overwrite_non_default_args!(&mut default_args.bar_color, convert_color_to_hex(&args.bar_color));
overwrite_non_default_args!(&mut default_args.text_color, convert_color_to_hex(&args.text_color));
overwrite_non_default_args!(
&mut default_args.background_color,
convert_color_to_hex(&args.background_color)
);
overwrite_non_default_args!(
&mut default_args.border_color,
convert_color_to_hex(&args.border_color)
);
overwrite_non_default_args!(
&mut default_args.bar_color,
convert_color_to_hex(&args.bar_color)
);
overwrite_non_default_args!(
&mut default_args.text_color,
convert_color_to_hex(&args.text_color)
);
overwrite_non_default_args!(&mut default_args.border_size, args.border_size);
overwrite_non_default_args!(&mut default_args.display_track_name, args.track_name);
overwrite_non_default_args!(&mut default_args.font_size, args.font_size);
Expand All @@ -120,19 +145,20 @@ pub fn write_fftargs_to_config(args: &FFTArgs) {
.expect("Could not open file.");
serde_yaml::to_writer(config_file, &default_args).unwrap();

let mut cfg_yaml: Vec<String> = read_to_string(&cfg_path)
.unwrap() // panic on possible file-reading errors
.lines() // split the string into an iterator of string slices
.map(String::from) // make each slice into a string
.collect(); // gather them together into a vector
let mut cfg_yaml: Vec<String> = read_to_string(&cfg_path)
.unwrap() // panic on possible file-reading errors
.lines() // split the string into an iterator of string slices
.map(String::from) // make each slice into a string
.collect(); // gather them together into a vector

cfg_yaml.retain(|x| x.contains(":"));

remove_file(&cfg_path);

let f = File::create(&cfg_path).expect("Unable to create file");
let mut f = BufWriter::new(f);
f.write_all(cfg_yaml.join("\n").as_bytes()).expect("Unable to write data");
f.write_all(cfg_yaml.join("\n").as_bytes())
.expect("Unable to write data");
}

pub fn reset_config_file() {
Expand All @@ -152,19 +178,67 @@ pub fn reset_config_file() {
pub fn merge_config_with_cli_args(args: &mut CLIArgs, use_default: bool) {
let default_user_config = ConfigFFTArgs::default();
if !config_exists() {
update_cli_arg!(&mut args.background_color, None::<String>, default_user_config.background_color);
update_cli_arg!(&mut args.bar_color, None::<String>, default_user_config.bar_color);
update_cli_arg!(&mut args.border_color, None::<String>, default_user_config.border_color);
update_cli_arg!(&mut args.border_size, None::<i32>, default_user_config.border_size);
update_cli_arg!(&mut args.font_size, None::<i32>, default_user_config.font_size);
update_cli_arg!(&mut args.freq_resolution, None::<u32>, default_user_config.freq_resolution);
update_cli_arg!(&mut args.max_freq, None::<f32>, default_user_config.max_freq);
update_cli_arg!(&mut args.min_freq, None::<f32>, default_user_config.min_freq);
update_cli_arg!(&mut args.smoothness, None::<u32>, default_user_config.smoothness);
update_cli_arg!(&mut args.text_color, None::<String>, default_user_config.text_color);
update_cli_arg!(
&mut args.background_color,
None::<String>,
default_user_config.background_color
);
update_cli_arg!(
&mut args.bar_color,
None::<String>,
default_user_config.bar_color
);
update_cli_arg!(
&mut args.border_color,
None::<String>,
default_user_config.border_color
);
update_cli_arg!(
&mut args.border_size,
None::<i32>,
default_user_config.border_size
);
update_cli_arg!(
&mut args.font_size,
None::<i32>,
default_user_config.font_size
);
update_cli_arg!(
&mut args.freq_resolution,
None::<u32>,
default_user_config.freq_resolution
);
update_cli_arg!(
&mut args.max_freq,
None::<f32>,
default_user_config.max_freq
);
update_cli_arg!(
&mut args.min_freq,
None::<f32>,
default_user_config.min_freq
);
update_cli_arg!(
&mut args.smoothness,
None::<u32>,
default_user_config.smoothness
);
update_cli_arg!(
&mut args.text_color,
None::<String>,
default_user_config.text_color
);
update_cli_arg!(&mut args.volume, None::<u32>, default_user_config.volume);
update_cli_arg!(&mut args.window_width, None::<f32>, default_user_config.window_width);
update_cli_arg!(&mut args.window_height, None::<f32>, default_user_config.window_height);
update_cli_arg!(
&mut args.window_width,
None::<f32>,
default_user_config.window_width
);
update_cli_arg!(
&mut args.window_height,
None::<f32>,
default_user_config.window_height
);
return;
}

Expand All @@ -182,17 +256,69 @@ pub fn merge_config_with_cli_args(args: &mut CLIArgs, use_default: bool) {
args.display_gui = Some(x);
}

update_cli_arg!(&mut args.background_color, user_config_yaml.background_color, default_user_config.background_color);
update_cli_arg!(&mut args.bar_color, user_config_yaml.bar_color, default_user_config.bar_color);
update_cli_arg!(&mut args.border_color, user_config_yaml.border_color, default_user_config.border_color);
update_cli_arg!(&mut args.border_size, user_config_yaml.border_size, default_user_config.border_size);
update_cli_arg!(&mut args.font_size, user_config_yaml.font_size, default_user_config.font_size);
update_cli_arg!(&mut args.freq_resolution, user_config_yaml.freq_resolution, default_user_config.freq_resolution);
update_cli_arg!(&mut args.max_freq, user_config_yaml.max_freq, default_user_config.max_freq);
update_cli_arg!(&mut args.min_freq, user_config_yaml.min_freq, default_user_config.min_freq);
update_cli_arg!(&mut args.smoothness, user_config_yaml.smoothness, default_user_config.smoothness);
update_cli_arg!(&mut args.text_color, user_config_yaml.text_color, default_user_config.text_color);
update_cli_arg!(&mut args.volume, user_config_yaml.volume, default_user_config.volume);
update_cli_arg!(&mut args.window_width, user_config_yaml.window_width, default_user_config.window_width);
update_cli_arg!(&mut args.window_height, user_config_yaml.window_height, default_user_config.window_height);
update_cli_arg!(
&mut args.background_color,
user_config_yaml.background_color,
default_user_config.background_color
);
update_cli_arg!(
&mut args.bar_color,
user_config_yaml.bar_color,
default_user_config.bar_color
);
update_cli_arg!(
&mut args.border_color,
user_config_yaml.border_color,
default_user_config.border_color
);
update_cli_arg!(
&mut args.border_size,
user_config_yaml.border_size,
default_user_config.border_size
);
update_cli_arg!(
&mut args.font_size,
user_config_yaml.font_size,
default_user_config.font_size
);
update_cli_arg!(
&mut args.freq_resolution,
user_config_yaml.freq_resolution,
default_user_config.freq_resolution
);
update_cli_arg!(
&mut args.max_freq,
user_config_yaml.max_freq,
default_user_config.max_freq
);
update_cli_arg!(
&mut args.min_freq,
user_config_yaml.min_freq,
default_user_config.min_freq
);
update_cli_arg!(
&mut args.smoothness,
user_config_yaml.smoothness,
default_user_config.smoothness
);
update_cli_arg!(
&mut args.text_color,
user_config_yaml.text_color,
default_user_config.text_color
);
update_cli_arg!(
&mut args.volume,
user_config_yaml.volume,
default_user_config.volume
);
update_cli_arg!(
&mut args.window_width,
user_config_yaml.window_width,
default_user_config.window_width
);
update_cli_arg!(
&mut args.window_height,
user_config_yaml.window_height,
default_user_config.window_height
);
}

0 comments on commit 6a1e6ab

Please sign in to comment.