1
0
Fork 0

Don't use direct Param initialization in exmaples

Since you now also need to specify the default field you probably
shouldn't use this anymore.
This commit is contained in:
Robbert van der Helm 2022-03-21 13:26:28 +01:00
parent 40d99a5cb3
commit 30b913e159
3 changed files with 18 additions and 38 deletions

View file

@ -1,20 +1,23 @@
use nih_plug::prelude::*; use nih_plug::prelude::*;
use parking_lot::RwLock; use parking_lot::RwLock;
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc;
struct Gain { struct Gain {
params: Pin<Box<GainParams>>, params: Pin<Box<GainParams>>,
} }
/// The [`Params`] derive macro gathers all of the information needed for the wrapepr to know about
/// the plugin's parameters, persistent serializable fields, and nested parameter groups. You can
/// aslo easily implement [`Params`] by hand if you want to, for instance, have multiple instances
/// of a parmaeters struct for multiple identical oscillators/filters/envelopes.
#[derive(Params)] #[derive(Params)]
struct GainParams { struct GainParams {
/// The parameter's ID is used to identify the parameter in the wrappred plugin API. As long as
/// these IDs remain constant, you can rename and reorder these fields as you wish. The
/// parameters are exposed to the host in the same order thye were defined in.
#[id = "gain"] #[id = "gain"]
pub gain: FloatParam, pub gain: FloatParam,
#[id = "stable"]
pub but_field_names_can_change: BoolParam,
/// This field isn't used in this exampleq, but anything written to the vector would be restored /// This field isn't used in this exampleq, but anything written to the vector would be restored
/// together with a preset/state file saved for this plugin. This can be useful for storign /// together with a preset/state file saved for this plugin. This can be useful for storign
/// things like sample data. /// things like sample data.
@ -53,37 +56,20 @@ impl Default for Gain {
impl Default for GainParams { impl Default for GainParams {
fn default() -> Self { fn default() -> Self {
Self { Self {
// There are three ways to specify parameters: gain: FloatParam::new(
// "Gain",
// ...either manually specify all fields: 0.0,
gain: FloatParam { FloatRange::Linear {
value: 0.0,
default: 0.0,
smoothed: Smoother::new(SmoothingStyle::Linear(50.0)),
value_changed: None,
range: FloatRange::Linear {
min: -30.0, min: -30.0,
max: 30.0, max: 30.0,
}, },
step_size: Some(0.01), )
name: "Gain", .with_smoother(SmoothingStyle::Linear(50.0))
unit: " dB", .with_step_size(0.01)
.with_unit(" dB")
// This is actually redundant, because a step size of two decimal places already // This is actually redundant, because a step size of two decimal places already
// causes the parameter to shown rounded // causes the parameter to shown rounded
value_to_string: Some(formatters::f32_rounded(2)), .with_value_to_string(formatters::f32_rounded(2)),
string_to_value: None,
// ...or specify the fields you want to initialize directly and leave the other
// fields at their defaults:
// // ..Default::default(),
},
// ...or use the builder interface:
but_field_names_can_change: BoolParam::new("Important value", false).with_callback(
Arc::new(|_new_value: bool| {
// If, for instance, updating this parameter would require other parts of the
// plugin's internal state to be updated other values to also be updated, then
// you can use this callback to for instance modify an atomic in the plugin.
}),
),
// Persisted fields can be intialized like any other fields, and they'll keep their when // Persisted fields can be intialized like any other fields, and they'll keep their when
// restoring the plugin's state. // restoring the plugin's state.
random_data: RwLock::new(Vec::new()), random_data: RwLock::new(Vec::new()),

View file

@ -10,9 +10,6 @@ use super::Param;
/// A floating point parameter that's stored unnormalized. The range is used for the normalization /// A floating point parameter that's stored unnormalized. The range is used for the normalization
/// process. /// process.
///
/// You can either initialize the struct directly, using `..Default::default()` to fill in the
/// unused fields, or you can use the builder interface with [`FloatParam::new()`].
// //
// XXX: To keep the API simple and to allow the optimizer to do its thing, the values are stored as // XXX: To keep the API simple and to allow the optimizer to do its thing, the values are stored as
// plain primitive values that are modified through the `*mut` pointers from the plugin's // plain primitive values that are modified through the `*mut` pointers from the plugin's

View file

@ -10,9 +10,6 @@ use super::Param;
/// A discrete integer parameter that's stored unnormalized. The range is used for the normalization /// A discrete integer parameter that's stored unnormalized. The range is used for the normalization
/// process. /// process.
///
/// You can either initialize the struct directly, using `..Default::default()` to fill in the
/// unused fields, or you can use the builder interface with [`IntParam::new()`].
// //
// XXX: To keep the API simple and to allow the optimizer to do its thing, the values are stored as // XXX: To keep the API simple and to allow the optimizer to do its thing, the values are stored as
// plain primitive values that are modified through the `*mut` pointers from the plugin's // plain primitive values that are modified through the `*mut` pointers from the plugin's