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