diff options
Diffstat (limited to 'src/model.rs')
-rw-r--r-- | src/model.rs | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/model.rs b/src/model.rs index 7fad354..89255b9 100644 --- a/src/model.rs +++ b/src/model.rs @@ -1,12 +1,12 @@ -use transforms; +use signal::Signal; +use correlation::Correlation; +use pitch::Pitch; #[derive(Default)] pub struct Model { - pub fundamental_frequency: Option<f32>, - pub pitch: String, - pub error: Option<f32>, - pub signal: Vec<f32>, - pub correlation: Vec<f32> + pub pitch: Option<Pitch>, + pub signal: Signal, + pub correlation: Correlation } impl Model { @@ -14,22 +14,18 @@ impl Model { Model::default() } - pub fn from_signal(signal: &[f32], sample_rate: f32) -> Model { - let correlation = transforms::correlation(signal); - let fundamental = transforms::find_fundamental_frequency(signal, sample_rate); - let pitch = fundamental.map_or( - String::new(), - transforms::hz_to_pitch - ); - - let error = fundamental.map(transforms::hz_to_cents_error); + pub fn from_signal(signal: Signal) -> Model { + let correlation = Correlation::from_signal(&signal); + let pitch = correlation.find_fundamental_frequency(&signal); Model { - fundamental_frequency: fundamental, pitch: pitch, - error: error, - signal: transforms::align_to_rising_edge(signal), + signal: signal, correlation: correlation } } + + pub fn pitch_display(&self) -> String { + self.pitch.map_or(String::new(), |p| format!("{}", p)) + } } |