m8_file_parser/instruments/modulator/
drum_env.rs

1use crate::{writer::Writer, Version};
2
3use super::{M8Result, Reader};
4
5const DRUMENV_COMMAND_NAMES: [[&'static str; 5]; 4] = [
6    ["EA1", "PK1", "BO1", "DE1", "ET1"],
7    ["EA2", "PK2", "BO2", "DE2", "ET2"],
8    ["EA3", "PK3", "BO3", "DE3", "ET3"],
9    ["EA4", "PK4", "BO4", "DE4", "ET4"],
10];
11
12#[derive(PartialEq, Debug, Clone)]
13pub struct DrumEnv {
14    pub dest: u8,
15    pub amount: u8,
16    pub peak: u8,
17    pub body: u8,
18    pub decay: u8,
19}
20
21impl DrumEnv {
22    pub fn command_names(_ver: Version, mod_id: usize) -> &'static [&'static str] {
23        &DRUMENV_COMMAND_NAMES[mod_id]
24    }
25
26    pub fn write(&self, w: &mut Writer) {
27        w.write(self.amount);
28        w.write(self.peak);
29        w.write(self.body);
30        w.write(self.decay);
31    }
32
33    pub fn from_reader(reader: &mut Reader, dest: u8) -> M8Result<Self> {
34        Ok(Self {
35            dest,
36            amount: reader.read(),
37            peak: reader.read(),
38            body: reader.read(),
39            decay: reader.read(),
40        })
41    }
42}