use crate::ChannelMessage;
pub fn encode_channel(message: &ChannelMessage) -> (u8, Vec<u8>) {
match *message {
ChannelMessage::NoteOff { ch, key, vel } => (0x80 | ch.0, vec![key.0, vel.0]),
ChannelMessage::NoteOn { ch, key, vel } => (0x90 | ch.0, vec![key.0, vel.0]),
ChannelMessage::PolyAftertouch { ch, key, pressure } => {
(0xa0 | ch.0, vec![key.0, pressure.0])
}
ChannelMessage::ControlChange { ch, cc, value } => (0xb0 | ch.0, vec![cc.0, value.0]),
ChannelMessage::ProgramChange { ch, program } => (0xc0 | ch.0, vec![program.0]),
ChannelMessage::ChanAftertouch { ch, pressure } => (0xd0 | ch.0, vec![pressure.0]),
ChannelMessage::PitchBend { ch, value } => (
0xe0 | ch.0,
vec![(value.0 & 0x7f) as u8, ((value.0 >> 7) & 0x7f) as u8],
),
}
}