-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent_command.rs
More file actions
76 lines (73 loc) · 2.97 KB
/
event_command.rs
File metadata and controls
76 lines (73 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#[derive(Debug, Default, Copy, Clone)]
pub enum NoteCommand {
#[default]
None, // _, 0
SetTempo(u8), // A, 1
JumpToOrder(u8), // B, 2
BreakToRow(u8), // C, 3
/// Has lot of extra effects depending on value
VolumeSlideDown(u8), // D, 4
PitchSlideDown(u8), // E, 5
PitchSlideUp(u8), // F, 6
SlideToNote(u8), // G, 7
Vibrato(u8), // H, 8
Tremor(u8), // I, 9
Arpeggio(u8), // J, 10
VibratoAndVolSlideDown(u8), // K, 11
SlideToNoteAndVolSlideDown(u8), // L, 12
SetChannelVol(u8), // M, 13
/// Some extra effects depending on value
ChannelVolumeSlideDown(u8), // N, 14
SetSampleOffset(u8), // O. 15
/// also can do fine panning
PanningSlide(u8), // P, 16
RetriggerNote(u8), // Q, 17
Tremolo(u8), // R, 18
/// Can do a lot of stuff, most of which doesn't have a value
AlmostEverything(u8), // S, 19
/// Can also do slides
TempoChange(u8), // T, 20
FineVibrato(u8), // U, 21
SetGlobalVolume(u8), // V, 22
GlobalVolumeSlide(u8), // W, 23
SetPanning(u8), // X, 24
Panbrello(u8), // Y, 25
MIDIMacros(u8), // Z, 26
// Effect byte value reaches until 31, so some missing?
}
pub struct UnknownCommand;
impl TryFrom<(u8, u8)> for NoteCommand {
type Error = UnknownCommand;
fn try_from((command_type, command_value): (u8, u8)) -> Result<Self, Self::Error> {
match command_type {
0 => Ok(Self::None),
1 => Ok(Self::SetTempo(command_value)),
2 => Ok(Self::JumpToOrder(command_value)),
3 => Ok(Self::BreakToRow(command_value)),
4 => Ok(Self::VolumeSlideDown(command_value)),
5 => Ok(Self::PitchSlideDown(command_value)),
6 => Ok(Self::PitchSlideUp(command_value)),
7 => Ok(Self::SlideToNote(command_value)),
8 => Ok(Self::Vibrato(command_value)),
9 => Ok(Self::Tremor(command_value)),
10 => Ok(Self::Arpeggio(command_value)),
11 => Ok(Self::VibratoAndVolSlideDown(command_value)),
12 => Ok(Self::SlideToNoteAndVolSlideDown(command_value)),
13 => Ok(Self::SetChannelVol(command_value)),
14 => Ok(Self::ChannelVolumeSlideDown(command_value)),
15 => Ok(Self::SetSampleOffset(command_value)),
16 => Ok(Self::PanningSlide(command_value)),
17 => Ok(Self::RetriggerNote(command_value)),
18 => Ok(Self::Tremolo(command_value)),
19 => Ok(Self::AlmostEverything(command_value)),
20 => Ok(Self::TempoChange(command_value)),
21 => Ok(Self::FineVibrato(command_value)),
22 => Ok(Self::SetGlobalVolume(command_value)),
23 => Ok(Self::GlobalVolumeSlide(command_value)),
24 => Ok(Self::SetPanning(command_value)),
25 => Ok(Self::Panbrello(command_value)),
26 => Ok(Self::MIDIMacros(command_value)),
_ => Err(UnknownCommand),
}
}
}