use serde::{Deserialize, Serialize};
use std::path::PathBuf;
pub use crate::dsp::adaptive::AdaptiveComputeMode;
pub use crate::dsp::adaptive::SlimOverride;
use crate::dsp::oversample::OversampleFactor;
pub use crate::math::activations::ActivationPrecision;
const GATE_THRESHOLD_DB_DEFAULT: f32 = -70.0;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct NamPluginParams {
#[serde(default)]
pub input_gain_db: f32,
#[serde(default)]
pub output_gain_db: f32,
#[serde(default = "default_gate_threshold_db")]
pub gate_threshold_db: f32,
#[serde(default)]
pub model_path: Option<PathBuf>,
#[serde(default)]
pub model_basename: Option<String>,
#[serde(default)]
pub model_search_paths: Vec<PathBuf>,
#[serde(default)]
pub bypass: bool,
#[serde(default)]
pub adaptive_compute: AdaptiveComputeMode,
#[serde(default)]
pub slim_override: SlimOverride,
#[serde(default)]
pub oversample: OversampleFactor,
#[serde(default)]
pub ir_path: Option<PathBuf>,
#[serde(default)]
pub activation_precision: ActivationPrecision,
}
fn default_gate_threshold_db() -> f32 {
GATE_THRESHOLD_DB_DEFAULT
}
impl Default for NamPluginParams {
fn default() -> Self {
Self {
input_gain_db: 0.0,
output_gain_db: 0.0,
gate_threshold_db: GATE_THRESHOLD_DB_DEFAULT,
model_path: None,
model_basename: None,
model_search_paths: Vec::new(),
bypass: false,
adaptive_compute: AdaptiveComputeMode::Off,
slim_override: SlimOverride::Auto,
oversample: OversampleFactor::Off,
ir_path: None,
activation_precision: ActivationPrecision::Standard,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct RtPluginParams {
pub input_gain_db: f32,
pub output_gain_db: f32,
pub gate_threshold_db: f32,
pub bypass: bool,
pub adaptive_compute: AdaptiveComputeMode,
pub slim_override: SlimOverride,
pub oversample: OversampleFactor,
pub activation_precision: ActivationPrecision,
}
impl RtPluginParams {
pub fn from_plugin_params(params: &NamPluginParams) -> Self {
Self {
input_gain_db: params.input_gain_db,
output_gain_db: params.output_gain_db,
gate_threshold_db: params.gate_threshold_db,
bypass: params.bypass,
adaptive_compute: params.adaptive_compute,
slim_override: params.slim_override,
oversample: params.oversample,
activation_precision: params.activation_precision,
}
}
}
impl Default for RtPluginParams {
fn default() -> Self {
Self {
input_gain_db: 0.0,
output_gain_db: 0.0,
gate_threshold_db: GATE_THRESHOLD_DB_DEFAULT,
bypass: false,
adaptive_compute: AdaptiveComputeMode::Off,
slim_override: SlimOverride::Auto,
oversample: OversampleFactor::Off,
activation_precision: ActivationPrecision::Standard,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_params_default() {
let params = NamPluginParams::default();
assert_eq!(params.input_gain_db, 0.0);
assert_eq!(params.output_gain_db, 0.0);
assert_eq!(params.gate_threshold_db, -70.0);
assert_eq!(params.model_path, None);
assert_eq!(params.model_basename, None);
assert!(params.model_search_paths.is_empty());
assert!(!params.bypass);
assert_eq!(params.ir_path, None);
}
}