Expand description
Music theory library with midi, notes, chords, scales, and more
§Feature flags
Staff uses a set of feature flags to reduce the amount of compiled code. It
is possible to just enable certain features over others. By default, staff
does not enable any features but allows one to enable a subset for their use
case. Below is a list of the available feature flags. You may also notice
above each function, struct and trait there is listed one or more feature flags
that are required for that item to be used. If you are new to staff it is
recommended that you use the full
feature flag which will enable all public APIs.
Beware though that this will pull in many extra dependencies that you may not
need.
full
: Enables all features listed below.std
: Enables std, otherwise this crate will use#![no_std]
parse
Enables thestaff::parse
module.fretboard
Enables thestaff::fretboard
module.render
Enables thestaff::render
module.
§Examples
Create a C Major (1st inversion) chord and iterate over its notes.
use staff::{midi, Chord, Pitch};
// C/E
let notes = [midi!(E, 3), midi!(G, 3), midi!(C, 4)];
let chord = Chord::from_midi(midi!(C, 4), notes).unwrap();
assert_eq!(chord.to_string(), "C/E");
assert!(chord.into_iter().eq(notes));
Create a C Major scale and iterate over its notes.
use staff::{midi, Note, Scale};
// C major
let scale = Scale::major(midi!(C, 4));
assert!(scale.eq([
midi!(C, 4),
midi!(D, 4),
midi!(E, 4),
midi!(F, 4),
midi!(G, 4),
midi!(A, 4),
midi!(B, 4),
]));
Re-exports§
Modules§
- chord
- Chord struct and iterators
- fmt
- Format trait to adjust
fmt::Display
output - fretboard
fretboard
- Fretboard iterator for guitar and other instruments
- midi
- Midi notes, octaves, and sets
- note
- Formatted notes
- render
render
- Sheet music engraving
- scale
- Scales with iterators
- set
- Collections of intervals and pitches
- time
- ui
ui
Macros§
Structs§
- Interval
- Music interval in semitones.
- Key
- A key signature represented as the total number of sharps or flats.