summaryrefslogtreecommitdiff
path: root/src/model.rs
blob: 89255b91b33f079bcfdd31dd4aa9bde32c71b937 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use signal::Signal;
use correlation::Correlation;
use pitch::Pitch;

#[derive(Default)]
pub struct Model {
    pub pitch: Option<Pitch>,
    pub signal: Signal,
    pub correlation: Correlation
}

impl Model {
    pub fn new() -> Model {
        Model::default()
    }

    pub fn from_signal(signal: Signal) -> Model {
        let correlation = Correlation::from_signal(&signal);
        let pitch = correlation.find_fundamental_frequency(&signal);
        
        Model {
            pitch: pitch,
            signal: signal,
            correlation: correlation
        }
    }

    pub fn pitch_display(&self) -> String {
        self.pitch.map_or(String::new(), |p| format!("{}", p))
    }
}