#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(rename_all = "snake_case")
)]
pub enum Interpolator {
Nearest,
Linear,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(rename_all = "snake_case")
)]
pub enum EnvelopeCurveType {
Linear,
Exponential,
}
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(default)
)]
pub struct EnvelopeOptions {
pub attack_curve: EnvelopeCurveType,
pub decay_curve: EnvelopeCurveType,
pub release_curve: EnvelopeCurveType,
}
impl Default for EnvelopeOptions {
fn default() -> Self {
Self {
attack_curve: EnvelopeCurveType::Exponential,
decay_curve: EnvelopeCurveType::Linear,
release_curve: EnvelopeCurveType::Linear,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(default)
)]
pub struct SoundfontInitOptions {
pub bank: Option<u8>,
pub preset: Option<u8>,
pub vol_envelope_options: EnvelopeOptions,
pub use_effects: bool,
pub interpolator: Interpolator,
}
impl Default for SoundfontInitOptions {
fn default() -> Self {
Self {
bank: None,
preset: None,
vol_envelope_options: Default::default(),
use_effects: true,
interpolator: Interpolator::Nearest,
}
}
}