Skip to main content

mseq_core/
lib.rs

1//! # mseq_core
2//!
3//! Core framework for building custom MIDI sequencers.
4//!
5//! `mseq_core` provides the foundational traits and utilities needed to implement
6//! your own MIDI sequencer, with a focus on portability and modularity.
7//!
8//! This crate is built with `#![no_std]`, making it suitable for embedded platforms
9//! as well as standard operating systems.
10//!
11//! ## Getting Started
12//!
13//! To create a custom sequencer, you typically:
14//!
15//! - Implement the [`Conductor`] trait to define your sequencer's control logic.
16//! - Define one or more tracks by either:
17//!   - Implementing the [`Track`] trait for custom behavior.
18//!   - Instantiating [`DeteTrack`] for deterministic, looping patterns.
19//!
20//! ## Platform Support
21//!
22//! - For OS-based systems, use the [`mseq`](https://crates.io/crates/mseq) crate — a reference implementation of `mseq_core` for standard platforms.
23//! - For embedded development (e.g., STM32F4), see the [`mseq_embedded`](https://github.com/MF-Room/mseq_embedded) repository, which provides an STM32-specific integration of `mseq_core`.
24//!
25//! ## Crate Features
26//!
27//! - No `std` dependency (`#![no_std]` compatible).
28//! - Modular and extensible design.
29//! - Reusable across multiple platforms.
30
31#![warn(missing_docs)]
32#![no_std]
33
34extern crate alloc;
35
36mod bpm;
37mod conductor;
38mod context;
39mod midi;
40mod midi_controller;
41mod midi_out;
42mod note;
43mod track;
44
45pub use conductor::Conductor;
46pub use context::*;
47pub use midi::*;
48pub use midi_controller::*;
49pub use midi_out::MidiOut;
50pub use note::Note;
51pub use track::*;