Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimized fft frame counters for better frame sync #13

Merged
merged 5 commits into from Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
);
}