m8_file_parser/instruments/modulator/
trig_env.rs

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