1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
#![cfg_attr(all(not(feature = "std"), not(test)), no_std)]
#![doc(html_root_url = "https://docs.rs/helgoboss-midi/0.4.0")]
//! Interfaces, data structures and utilities for dealing with MIDI messages.
//!
//! # Features
//!
//! - Complete support for the following message types:
//! - Short messages (3 bytes)
//! - 14-bit Control Change messages
//! - (N)RPN messages
//! - Scanners for extracting 14-bit Control Change and (N)RPN messages from a stream of short
//! messages
//! - Suitable for real-time usage (no heap allocation, no dynamic dispatch, no locking)
//! - Unified API to work with different short message data structures (see
//! [`ShortMessage`](trait.ShortMessage.html) trait)
//! - Uses wording which is as close as possible to the [MIDI 1.0 specification](https://www.midi.org/specifications-old/category/midi-1-0-detailed-specifications)
//!
//! # Not yet implemented
//!
//! Data structures and utilities for dealing with System Exclusive messages are not yet
//! implemented. They will be added eventually as separate structures on top of the
//! existing ones (similar to (N)RPN and 14-bit Control Change).
//!
//! # Examples
//!
//! See how to ...
//!
//! - [Create and inspect short messages](struct.RawShortMessage.html#example)
//! - [Easily match short messages](enum.StructuredShortMessage.html#example)
//! - [Create and inspect 14-bit Control Change
//! messages](struct.ControlChange14BitMessage.html#example)
//! - [Create and inspect (N)RPN messages](struct.ParameterNumberMessage.html#example)
//! - [Create MIDI messages with minimum boilerplate](test_util/index.html#example)
//! - [Scan stream for 14-bit Control Change
//! messages](struct.ControlChange14BitMessageScanner.html#example)
//! - [Scan stream for (N)RPN messages](struct.ParameterNumberMessageScanner.html#example)
#[macro_use]
mod newtype_macros;
pub use newtype_macros::*;
mod short_message;
pub use short_message::*;
mod short_message_factory;
pub use short_message_factory::*;
mod structured_short_message;
pub use structured_short_message::*;
mod raw_short_message;
pub use raw_short_message::*;
mod control_change_14_bit_message;
pub use control_change_14_bit_message::*;
mod control_change_14_bit_message_scanner;
pub use control_change_14_bit_message_scanner::*;
mod parameter_number_message;
pub use parameter_number_message::*;
mod parameter_number_message_scanner;
pub use parameter_number_message_scanner::*;
#[cfg(feature = "std")]
mod polling_parameter_number_message_scanner;
#[cfg(feature = "std")]
pub use polling_parameter_number_message_scanner::*;
// I added the _mod suffix because of intellij-rust issue 4992
mod channel_mod;
pub use channel_mod::*;
mod key_number_mod;
pub use key_number_mod::*;
mod controller_number_mod;
pub use controller_number_mod::*;
mod u4_mod;
pub use u4_mod::*;
mod u7_mod;
pub use u7_mod::*;
mod u14_mod;
pub use u14_mod::*;
mod bit_util;
pub(crate) use bit_util::*;
pub mod test_util;