Midi encoding and decoding library suitable for real-time execution.
use std::convert::TryFrom;
// Decoding messages from bytes.
fn handle_midi_message(bytes: &[u8]) -> Result<(), wmidi::FromBytesError> {
let message = wmidi::MidiMessage::try_from(bytes)?;
if let wmidi::MidiMessage::NoteOn(_, note, _) = message {
println!("Singing {}", note);
}
Ok(())
}
// Encoding messages to bytes.
fn midi_to_bytes(message: wmidi::MidiMessage<'_>) -> Vec<u8> {
let mut bytes = vec![0u8; message.bytes_size()];
message.copy_to_slice(bytes.as_mut_slice()).unwrap();
bytes
}
- Rename
MidiMessage::wire_size()
toMidiMessage::bytes_size()
. - Introduce
MidiMessage::copy_to_slice()
method.
- Instances of U7 and U14 now have bounds checking.
- Note is now an enum instead of a u8. Can be converted with
Note::try_from
andu8::from
.