#[derive(PartialEq, Debug)]
pub enum NoteName {
A,
B,
C,
D,
E,
F,
G,
}
#[derive(PartialEq, Debug)]
pub enum Octave {
S0,
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
}
impl Default for Octave {
fn default() -> Self {
Octave::S3
}
}
#[derive(PartialEq, Debug)]
pub enum Accidental {
None,
Sharp,
Flat,
}
impl Default for Accidental {
fn default() -> Self {
Accidental::None
}
}
#[derive(PartialEq, Debug)]
pub struct Pitch {
pub note: NoteName,
pub octave: Octave,
pub accidental: Accidental,
}
impl Pitch {
pub fn new(note: NoteName) -> Pitch {
Pitch {
note,
octave: Default::default(),
accidental: Default::default(),
}
}
pub fn octave(&mut self, octave: Octave) {
self.octave = octave;
}
pub fn accidental(&mut self, accidental: Accidental) {
self.accidental = accidental;
}
pub fn sharpen(&mut self) {
self.accidental = Accidental::Sharp
}
pub fn flatten(&mut self) {
self.accidental = Accidental::Flat
}
}