Skip to main content

nord_format/formats/ns4/
synth_voice.rs

1//! One synth layer's voice half: oscillator, filter, envelopes and LFO.
2
3use crate::components::{Frequency, Interval, Level, Level6, MorphTarget, Rate, Selector, Time};
4#[nord_bits_derive::bitbody(44)]
5pub struct SynthVoice {
6    #[bits(2..=3)]
7    pub analog_type_knob_1: Selector<2>,
8    #[bits(7..=9)]
9    pub analog_cat_knob_2: Selector<3>,
10    #[bits(11..=16)]
11    pub analog_wave_partial_knob_3: Selector<6>,
12    #[bits(17..=23)]
13    pub osc_ctrl: Level,
14    #[bits(24..=31)]
15    pub osc_ctrl_wheel: MorphTarget,
16    #[bits(32..=39)]
17    pub osc_ctrl_aftertouch: MorphTarget,
18    #[bits(40..=47)]
19    pub osc_ctrl_ctrl_pedal: MorphTarget,
20    #[bits(48..=54)]
21    pub pitch_fine: Level,
22    #[bits(55..=60)]
23    pub pitch_coarse: Interval,
24    #[bits(63..=69)]
25    pub osc_env_attack: Time,
26    #[bits(70..=76)]
27    pub osc_env_decay: Time,
28    #[bits(77..=83)]
29    pub osc_env_release: Time,
30    #[bits(84..=90)]
31    pub osc_env_amount: Level,
32    #[bits(91..=98)]
33    pub osc_env_amount_wheel: MorphTarget,
34    #[bits(99..=106)]
35    pub osc_env_amount_aftertouch: MorphTarget,
36    #[bits(107..=114)]
37    pub osc_env_amount_ctrl_pedal: MorphTarget,
38    #[bits(115..=115)]
39    pub osc_env_to_pitch_enabled: bool,
40    #[bits(116..=116)]
41    pub osc_env_velocity_enabled: bool,
42    #[bits(117..=118)]
43    pub sample_options: Selector<2>,
44    #[bits(119..=120)]
45    pub lfo_target: Selector<2>,
46    #[bits(121..=123)]
47    pub lfo_shape: Selector<3>,
48    #[bits(124..=124)]
49    pub lfo_master_clock_enabled: bool,
50    #[bits(125..=131)]
51    pub lfo_rate_time: Rate,
52    #[bits(132..=139)]
53    pub lfo_rate_time_wheel: MorphTarget,
54    #[bits(140..=147)]
55    pub lfo_rate_time_aftertouch: MorphTarget,
56    #[bits(148..=155)]
57    pub lfo_rate_time_ctrl_pedal: MorphTarget,
58    #[bits(156..=162)]
59    pub lfo_mod_amount: Level,
60    #[bits(163..=170)]
61    pub lfo_mod_amount_wheel: MorphTarget,
62    #[bits(171..=178)]
63    pub lfo_mod_amount_aftertouch: MorphTarget,
64    #[bits(179..=186)]
65    pub lfo_mod_amount_ctrl_pedal: MorphTarget,
66    #[bits(187..=193)]
67    pub amp_env_attack: Time,
68    #[bits(194..=200)]
69    pub amp_env_decay: Time,
70    #[bits(201..=207)]
71    pub amp_env_release: Time,
72    #[bits(208..=209)]
73    pub amp_env_velocity: Selector<2>,
74    #[bits(210..=212)]
75    pub filter_type: Selector<3>,
76    #[bits(213..=219)]
77    pub filter_freq: Frequency,
78    #[bits(220..=227)]
79    pub filter_freq_wheel: MorphTarget,
80    #[bits(228..=235)]
81    pub filter_freq_aftertouch: MorphTarget,
82    #[bits(236..=243)]
83    pub filter_freq_ctrl_pedal: MorphTarget,
84    /// ⚠️ The offset table's name runs two parameters together; the resonance is the one
85    /// the three slots below move. Inferred from specimens; not confirmed on hardware.
86    #[bits(244..=250)]
87    pub filter_resonance_freq_hp: Level,
88    #[bits(251..=258)]
89    #[morphs(filter_resonance_freq_hp)]
90    pub filter_resonance_wheel: MorphTarget,
91    #[bits(259..=266)]
92    #[morphs(filter_resonance_freq_hp)]
93    pub filter_resonance_aftertouch: MorphTarget,
94    #[bits(267..=274)]
95    #[morphs(filter_resonance_freq_hp)]
96    pub filter_resonance_ctrl_pedal: MorphTarget,
97    #[bits(275..=276)]
98    pub filter_track: Selector<2>,
99    #[bits(277..=278)]
100    pub filter_drive: Selector<2>,
101    #[bits(279..=285)]
102    pub filter_env_amount: Level,
103    #[bits(286..=293)]
104    pub filter_env_amount_wheel: MorphTarget,
105    #[bits(294..=301)]
106    pub filter_env_amount_aftertouch: MorphTarget,
107    #[bits(302..=309)]
108    pub filter_env_amount_ctrl_pedal: MorphTarget,
109    #[bits(310..=316)]
110    pub filter_env_attack: Time,
111    #[bits(317..=323)]
112    pub filter_env_decay: Time,
113    #[bits(324..=330)]
114    pub filter_env_release: Time,
115    #[bits(331..=331)]
116    pub filter_velocity_enabled: bool,
117    #[bits(332..=332)]
118    pub filter_enabled: bool,
119    #[bits(333..=339)]
120    pub vibrato_rate: Rate,
121    #[bits(340..=345)]
122    pub vibrato_amount: Level6,
123    #[bits(346..=346)]
124    pub sample_bright_enabled: bool,
125}