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