m8_file_parser/instruments/modulator/
adsr_env.rs

1use crate::Version;
2
3use super::*;
4use crate::writer::Writer;
5
6#[derive(PartialEq, Debug, Clone)]
7pub struct ADSREnv {
8    pub dest: u8,
9    pub amount: u8,
10    pub attack: u8,
11    pub decay: u8,
12    pub sustain: u8,
13    pub release: u8,
14}
15
16const ADSRENV_COMMAND_NAMES: [[&'static str; 5]; 4] = [
17    ["EA1", "AT1", "DE1", "SU1", "ET1"],
18    ["EA2", "AT2", "DE2", "SU2", "ET2"],
19    ["EA3", "AT3", "DE3", "SU3", "ET3"],
20    ["EA4", "AT4", "DE4", "SU4", "ET4"],
21];
22
23impl ADSREnv {
24    pub fn command_name(_ver: Version, mod_id: usize) -> &'static [&'static str] {
25        &ADSRENV_COMMAND_NAMES[mod_id]
26    }
27
28    pub fn write(&self, w: &mut Writer) {
29        w.write(self.amount);
30        w.write(self.attack);
31        w.write(self.decay);
32        w.write(self.sustain);
33        w.write(self.release);
34    }
35
36    pub fn from_reader(reader: &mut Reader, dest: u8) -> M8Result<Self> {
37        Ok(Self {
38            dest,
39            amount: reader.read(),
40            attack: reader.read(),
41            decay: reader.read(),
42            sustain: reader.read(),
43            release: reader.read(),
44        })
45    }
46}