music_note/midi/
message.rs1use super::MidiNote;
2
3pub struct NoteMessage {
4 pub note: MidiNote,
5 pub velocity: u8,
6}
7
8pub enum Message {
9 NoteOff(NoteMessage),
10 NoteOn(NoteMessage),
11}
12
13impl FromIterator<u8> for Message {
14 fn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self {
15 let mut iter = iter.into_iter();
16 let status = iter.next().unwrap();
17 match status >> 4 {
18 0b1000 => {
19 let note = MidiNote::from_byte(iter.next().unwrap());
20 let velocity = iter.next().unwrap();
21 Message::NoteOff(NoteMessage { note, velocity })
22 }
23 0b1001 => {
24 let note = MidiNote::from_byte(iter.next().unwrap());
25 let velocity = iter.next().unwrap();
26 Message::NoteOn(NoteMessage { note, velocity })
27 }
28 _ => todo!(),
29 }
30 }
31}