1#![allow(clippy::upper_case_acronyms)]
2
3pub mod chord;
4pub mod chord_chart;
5pub mod chord_sequence;
6pub mod chord_type;
7pub mod distance;
8pub mod fingering;
9pub mod fret_pattern;
10pub mod interval;
11pub mod note;
12pub mod pitch_class;
13pub mod staff_position;
14pub mod tuning;
15pub mod voicing;
16pub mod voicing_graph;
17
18pub use chord::Chord;
19pub use chord_chart::ChordChart;
20pub use chord_sequence::ChordSequence;
21pub use chord_type::{ChordType, NoMatchingChordTypeFoundError};
22pub use distance::Distance;
23pub use fingering::Fingering;
24pub use fret_pattern::FretPattern;
25pub use interval::Interval;
26pub use note::Note;
27pub use pitch_class::PitchClass;
28pub use staff_position::StaffPosition;
29pub use tuning::Tuning;
30pub use voicing::Voicing;
31pub use voicing_graph::VoicingGraph;
32
33pub const STRING_COUNT: usize = 4;
35
36pub const FINGER_COUNT: usize = 4;
38
39pub const PITCH_CLASS_COUNT: Semitones = 12;
41
42pub const MIN_CHART_WIDTH: Semitones = 4;
44
45pub type FretID = u8;
48
49pub type Semitones = u8;
52
53pub type StaffSteps = u8;
56
57pub type FingerPosition = (u8, u8);
60
61pub type UkeString = (Note, FretID, Note);
65
66#[derive(Clone, Copy)]
67pub struct VoicingConfig {
68 pub tuning: Tuning,
69 pub min_fret: FretID,
70 pub max_fret: FretID,
71 pub max_span: Semitones,
72}
73
74impl Default for VoicingConfig {
75 fn default() -> Self {
76 Self {
77 tuning: Tuning::C,
78 min_fret: 0,
79 max_fret: 12,
80 max_span: 4,
81 }
82 }
83}