rustaudio / wmidi Goto Github PK
View Code? Open in Web Editor NEWRust midi encoding and decoding library.
License: MIT License
Rust midi encoding and decoding library.
License: MIT License
Debian runs "autopkgtests" for rust crates, which fails for wmidi. See:
https://ci.debian.net/packages/r/rust-wmidi/testing/amd64/40166127/#L3759
Adding #[cfg(feature = "std")]
before #[test]
where needed fixed some, but I could not get all error adressed this way.
Over the past year, the MMA has been detailling the various components of the MIDI 2.0 specification and working to define things such as an official MIDI 2.0 USB profile. The MIDI 2.0 protocol itself aims to extend the MIDI 1.0 protocol in a back-compatible way (such as by introducing higher resolution note-on and data/control change messages), as well as formalize the use of profiles (which is what GM2 essentially was, but also things like MIDI Show Control and the like), feature negotiation and making controllers into more of a configurable set of features than a list of spec-reccomanded/profile-mandated CC numbers.
It could be interesting to look into adding support for this new extended protocol here.
See #16
I suppose that this crate is usable for embedded targets like STM32, so it is [no_std]. If so, it would be nice to have a hint on that in the README.
MidiMessage::try_from(&[0])
panics on unreachable!
Calling wmidi::MidiMessage::try_from() on a raw Note ON message with velocity 0 currently returns a Note ON message.
According to the MIDI spec, a Note ON message with velocity 0 should be treated as a Note OFF message:
https://www.midi.org/forum/228-writing-midi-software-send-note-off
Do you consider this as a responsibility of the wmidi library, or a responsibility of the application?
I would suggest it is responsibility of the library, with two primary reasons:
Example sequence, expected result:
[144, 60, 127] => Ok(NoteOn(Ch1, C4(60), U7(127)))
[144, 60, 0] => Ok(NoteOff(Ch1, C4(60), U7(0)))
Example sequence, actual result:
[144, 60, 127] => Ok(NoteOn(Ch1, C4(60), U7(127)))
[144, 60, 0] => Ok(NoteOn(Ch1, C4(60), U7(0)))
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.