use serde::{Deserialize, Serialize};
use crate::tracker::instr_sid::SidVoice;
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct Vibrato {
pub enable: bool,
pub depth: u8,
pub speed_div: u8,
pub length_gate: bool,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct InterpVibrato {
pub enable: bool,
pub half_depth: u8,
pub shift: u8,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Eq)]
pub struct BounceRange {
pub lo: u8,
pub hi: u8,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct PulseSweep {
pub enable: bool,
pub speed: i8,
pub delay: u16,
#[serde(default)]
pub bounce: Option<BounceRange>,
#[serde(default)]
pub low_byte_mode: bool,
#[serde(default)]
pub reseed_on_note: bool,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Eq)]
pub enum ArpMode {
#[default]
None,
Octave,
TwoNoteFixed(u16),
TwoNoteInterval(u8),
ThreeNote { off_a: i8, off_b: i8 },
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct Drum {
pub enable: bool,
#[serde(default)]
pub no_freq_slide: bool,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Eq)]
pub enum SkydiveMode {
#[default]
Climb,
Add(i16),
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct Skydive {
pub enable: bool,
pub length_gate: u8,
pub mode: SkydiveMode,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct TwoPhase {
#[serde(default)]
pub attack_ctrl: u8,
#[serde(default)]
pub attack_frames: u8,
#[serde(default)]
pub attack_note: Option<u8>,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct WaveAlt {
#[serde(default)]
pub alt_ctrl: u8,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct Filter {
pub enable: bool,
#[serde(default)]
pub resonance: u8,
#[serde(default)]
pub routing: u8,
#[serde(default)]
pub cutoff_step: i8,
#[serde(default)]
pub cutoff_seed: u8,
#[serde(default)]
pub reseed_each_note: bool,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct ReplayerCompat {
#[serde(default)]
pub vib_overflow_reg: u16,
}
#[derive(Default, Serialize, Deserialize, Copy, Clone, Debug)]
pub struct RobEffects {
pub vibrato: Vibrato,
pub interp: InterpVibrato,
pub pulse_sweep: PulseSweep,
pub arpeggio: ArpMode,
pub drum: Drum,
pub skydive: Skydive,
pub two_phase: TwoPhase,
pub wave_alt: WaveAlt,
pub filter: Filter,
#[serde(default)]
pub hard_cut_release: bool,
#[serde(default)]
pub compat: ReplayerCompat,
}
#[derive(Default, Serialize, Deserialize, Debug, Clone)]
pub struct InstrRobSid {
pub voice: SidVoice,
pub fx: RobEffects,
}