m8_file_parser/instruments/modulator/
trig_env.rs1use 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}