add note
This commit is contained in:
parent
8148e3f725
commit
a7c020f785
|
@ -0,0 +1,63 @@
|
|||
use core::fmt;
|
||||
use std::fmt::Formatter;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum RelativeNote {
|
||||
C,
|
||||
CSharp,
|
||||
D,
|
||||
DSharp,
|
||||
E,
|
||||
F,
|
||||
FSharp,
|
||||
G,
|
||||
GSharp,
|
||||
A,
|
||||
ASharp,
|
||||
B,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct Note {
|
||||
relative: RelativeNote,
|
||||
octave: u8, // upper limit? 8?
|
||||
}
|
||||
|
||||
impl fmt::Display for Note {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
write!(
|
||||
f,
|
||||
"{}{}",
|
||||
match self.relative {
|
||||
RelativeNote::C => "C",
|
||||
RelativeNote::CSharp => "C#",
|
||||
RelativeNote::D => "D",
|
||||
RelativeNote::DSharp => "D#",
|
||||
RelativeNote::E => "E",
|
||||
RelativeNote::F => "F",
|
||||
RelativeNote::FSharp => "F#",
|
||||
RelativeNote::G => "G",
|
||||
RelativeNote::GSharp => "G#",
|
||||
RelativeNote::A => "A",
|
||||
RelativeNote::ASharp => "A#",
|
||||
RelativeNote::B => "B",
|
||||
},
|
||||
self.octave
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::note::{Note, RelativeNote};
|
||||
|
||||
#[test]
|
||||
fn c4() {
|
||||
assert_eq!(Note { relative: RelativeNote::C, octave: 4 }.to_string(), "C4");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_sharp_0() {
|
||||
assert_eq!(Note { relative: RelativeNote::ASharp, octave: 0 }.to_string(), "A#0");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue