m8_file_parser/instruments/modulator/
tracking_env.rs

1use crate::Version;
2
3use super::{M8Result, Reader, Writer};
4
5const TRACKING_ENV_COMMAND_NAMES: [[&'static str; 5]; 4] = [
6    ["TA1", "TS1", "TL1", "TH1", "TX1"],
7    ["TA2", "TS2", "TL2", "TH2", "TX2"],
8    ["TA3", "TS3", "TL3", "TH3", "TX3"],
9    ["TA4", "TS4", "TL4", "TH4", "TX4"],
10];
11
12#[derive(PartialEq, Debug, Clone)]
13pub struct TrackingEnv {
14    pub dest: u8,
15    pub amount: u8,
16    pub src: u8,
17    pub lval: u8,
18    pub hval: u8,
19}
20
21impl TrackingEnv {
22    pub fn command_name(_ver: Version, env_id: usize) -> &'static [&'static str] {
23        &TRACKING_ENV_COMMAND_NAMES[env_id]
24    }
25
26    pub fn write(&self, writer: &mut Writer) {
27        writer.write(self.amount);
28        writer.write(self.src);
29        writer.write(self.lval);
30        writer.write(self.hval);
31    }
32
33    pub fn from_reader(reader: &mut Reader, dest: u8) -> M8Result<Self> {
34        Ok(Self {
35            dest,
36            amount: reader.read(),
37            src: reader.read(),
38            lval: reader.read(),
39            hval: reader.read(),
40        })
41    }
42}